Avatar ·

Quando e em que ordem a função init() é executada em Go?

Olá a todos! Comecei a estudar Go recentemente e me deparei com algo que não entendi. Na documentação diz que em packages podemos declarar a função `init()`, que é executada automaticamente. Mas não consigo entender exatamente quando ela é executada e em que ordem, se houver várias dessas funções. Tenho um pequeno projeto com três arquivos. No package `main`, defini uma função `init()` que imprime "main init". Em outro arquivo do mesmo package, declarei outra `init()` que incrementa um contador. No package importado `config`, também há uma `init()` que lê configurações. Eu esperava que elas fossem executadas em alguma ordem lógica, mas ao executar o programa, a saída não foi óbvia. Aqui está um exemplo de código: ```go // main.go package main import "fmt" var counter int func init() { fmt.Println("First init in main") counter = 10 } func main() { fmt.Println("Main function, counter =", counter) } ``` ```go // extra.go (também package main) package main