Загрузка…
Загрузка…
Go · middle · сложность 6
init в Go — это специальная функция пакета, которая выполняется автоматически во время инициализации программы (до main). Он используется для первоначальной настройки, которая должна произойти один раз перед запуском основной логики.
Сначала инициализируются импортированные зависимости.
Затем инициализируются переменные пакета.
После этого вызываются функции пакета init.
Только после завершения всего дерева инициализации запускается main.
Между пакетами: да, внутри зависимостей порядок определен — сначала зависимости, затем потребительский пакет.
В одной упаковке:
порядок инициализации переменных определяется зависимостями между их;
для нескольких init разных файлов в одном пакете, полагаясь на «случайный»
Порядок текстовых файлов — плохая дизайнерская идея.
init.init:Неявные побочные эффекты.
Более тяжелая отладка и тестирование.
Более сложный контроль порядка в больших кодовых базах.
Сохраняйте init минимальным и предсказуемым.
Используйте явные конструкторы/Setup-функции для важной инициализации.
Зависимости и порядок запуска должны быть зафиксированы явно в составе layer.
init в Go выполняется автоматически и имеет формальные гарантии порядка на уровне графа импорта. Однако для читабельной и тестируемой архитектуры лучше сделать критическую инициализацию явной, а не полагаться на скрытые эффекты init.
init в Go — это специальная функция пакета, которая выполняется автоматически во время инициализации программы (до main).