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 a função `init()`. A documentação diz que ela é executada automaticamente, mas não consigo entender: quando exatamente? E o que acontece se eu tiver vários arquivos em um pacote, cada um com init()? E se eu importar uma biblioteca de terceiros que também tem init()? Aqui está meu exemplo. Tenho o pacote `database` com o arquivo `db.go`: ```go package database import "fmt" var Connection string func init() { fmt.Println("Inicializando BD...") Connection = "postgres://user:pass@localhost/mydb" } ``` E o arquivo `main.go`: ```go package main import ( "fmt" "myproject/database" ) func init() { fmt.Println("Meu init em main") } func main() { fmt.Println(database.Connection) } ``` Eu esperava que primeiro executasse o init em database, depois em main, e então main(). Mas isso é sempre assim? E se eu importar um pacote que importa outro pacote com init()? A ordem é garantida? E posso confiar no init?