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() ?