Загрузка…
Загрузка…
Go · middle · сложность 4
any (т. е. interface{}) подходит, когда тип значения объективно неизвестен на границе API. Однако чрезмерное использование any в предметной логике обычно ухудшает безопасность типов и затрудняет обслуживание.
any действительно оправдано:Уровни инфраструктуры и универсальные контейнеры: ведение журналов, общее оболочки, промежуточное ПО, библиотеки низкого уровня.
Декодирование слабо типизированных форматов, например частей JSON с непредсказуемыми schema.
Точки интеграции с внешними API: когда контракт является динамическим и строгий тип не может быть установлен заранее.
Переходные этапы рефакторинга: как временный компромисс с последующий возврат к конкретным типам.
В бизнес-модели, где известен тип: any скрывает ошибки до тех пор, пока
время выполнения вместо времени компиляции.
Когда any заменяет обычный дизайн API: несколько утверждений и типов.
переключатели в любом другом месте являются признаком неопределенных контрактов.
Когда вы можете использовать дженерики или интерфейс с минимальным методом: это дает более строгие и более читаемые ограничения.
Когда any по инерции «попадает повсюду»: код становится хрупким,
труднее тестировать и труднее развивать.
По умолчанию выбран конкретный тип.
Если требуется абстракция поведения — интерфейс с понятным контрактом.
Если требуется генерализация данных — дженерики.
any выходят за действительно динамические границы системы.
any — полезный инструмент, но не универсальный ответ. В зрелом коде Go он используется поточечно: там, где неоднозначность типов естественна, а не там, где может и должен быть выражен строгий контракт.
any (т. е. interface{}) подходит, когда тип значения объективно неизвестен на границе API.