Skip to content

Пакеты Go: порядок инициализации

Функция init()

  • Она вызывается автоматически при инициализации пакета, всегда перед основной функцией.

  • Мы не можем вызвать ее вручную.

  • У нас может быть несколько функций инициализации в файле, и порядок их выполнения будет соответствовать порядку их появления.

Наиболее распространенный вариант использования функций инициализации — инициализация глобальных переменных перед вызовом main.

Шаги инициализации

  1. Программа начинается с пакета main.

  2. Далее идет импорт пакета по списку, начиная с первого в списке.

  3. Если в пакете присутствует импорт других пакетов, произойдет импорт по списку, начиная с первого пакета.

  4. Далее будут инициализированы константы последнего пакета в дереве импортов (смотри изображение выше).

  5. Произойдет инициализация переменных последнего пакета в дереве импортов.

  6. Если в пакете присутствует функция init(), произойдет исполнение этой функции.

  7. Далее произойдет возвращение в пакет выше. Если в списке больше нет пакетов, инициализация пройдет по тому же сценарию const, var, init().

  8. В конце, после инициализации всего дерева импорта пакетов, будет произведена инициализация в пакете main — const, var, init. Затем запустится функция main().

Подробнее узнать о пакетах ты можешь по ссылке.