¿Cuándo y en qué orden se ejecuta la función init() en Go?
¡Hola a todos! Acabo de empezar a aprender Go y me encontré con un punto confuso. En la documentación dice que en los packages se puede declarar la función `init()`, que se ejecuta automáticamente. Pero no logro entender cuándo se ejecuta exactamente y en qué orden, si hay varias de estas funciones.
Tengo un pequeño proyecto de tres archivos. En el package `main` definí una función `init()` que imprime "main init". En otro archivo del mismo package declaré otra `init()` que incrementa un contador. En el package importado `config` también hay su propia `init()` que lee configuraciones. Esperaba que se ejecutaran en algún orden lógico, pero al ejecutar el programa la salida no fue obvia.
Aquí hay un ejemplo 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 (también package main)
package main