Avatar ·

Quand et dans quel ordre la fonction init() est-elle exécutée en Go ?

Bonjour à tous ! Je viens de commencer à apprendre Go et je suis tombé sur la fonction `init()`. Dans la documentation, il est dit qu'elle s'exécute automatiquement, mais je ne comprends pas : quand exactement ? Et que se passe-t-il si j'ai plusieurs fichiers dans un package, chacun avec un init() ? Et si j'importe une bibliothèque tierce qui a aussi un init() ? Voici mon exemple. Il y a un package `database` avec un fichier `db.go` : ```go package database import "fmt" var Connection string func init() { fmt.Println("Initialisation de la BD...") Connection = "postgres://user:pass@localhost/mydb" } ``` Et le fichier `main.go` : ```go package main import ( "fmt" "myproject/database" ) func init() { fmt.Println("Mon init dans main") } func main() { fmt.Println(database.Connection) } ``` Je m'attendais à ce que d'abord init dans database s'exécute, puis dans main, puis main(). Mais est-ce toujours le cas ? Que faire si j'importe un package qui en importe un autre avec init() ? L'ordre est-il garanti ? Et peut-on compter sur init() ?