Язык spe c объясняет инициализацию переменной следующим образом:
... переменная уровня пакета считается готовой для инициализации, если она еще не инициализирована и не имеет ни выражения инициализации, ни своего Выражение инициализации не зависит от неинициализированных переменных. Инициализация продолжается путем многократной инициализации следующей переменной уровня пакета, которая является самой ранней в порядке объявления и готова к инициализации, пока не будет готовых переменных для инициализации.
https://golang.org/ref/spec#Package_initialization
Итак, сначала инициализируются все переменные без зависимостей, затем переменные в зависимости от инициализированных переменных и т. Д.