Пакеты Go: порядок инициализации
Функция init()
-
Она вызывается автоматически при инициализации пакета, всегда перед основной функцией.
-
Мы не можем вызвать ее вручную.
-
У нас может быть несколько функций инициализации в файле, и порядок их выполнения будет соответствовать порядку их появления.
Наиболее распространенный вариант использования функций инициализации — инициализация глобальных переменных перед вызовом main.
Шаги инициализации
-
Программа начинается с пакета main.
-
Далее идет импорт пакета по списку, начиная с первого в списке.
-
Если в пакете присутствует импорт других пакетов, произойдет импорт по списку, начиная с первого пакета.
-
Далее будут инициализированы константы последнего пакета в дереве импортов (смотри изображение выше).
-
Произойдет инициализация переменных последнего пакета в дереве импортов.
-
Если в пакете присутствует функция init(), произойдет исполнение этой функции.
-
Далее произойдет возвращение в пакет выше. Если в списке больше нет пакетов, инициализация пройдет по тому же сценарию const, var, init().
-
В конце, после инициализации всего дерева импорта пакетов, будет произведена инициализация в пакете main — const, var, init. Затем запустится функция main().
Подробнее узнать о пакетах ты можешь по ссылке.