Warning: Undefined array key "typ" in /srv/vhost/diaridigital.net/home/html/sourcecode/main/articles.php on line 18
La función init()
Tiempo de lectura: 1 minutos
Cada vez que se declare una función init(), Go la cargará y ejecutará antes que cualquier otra cosa en ese paquete.
La función init()
La función init en Go es una funcionalidad poderosa que permite realizar tareas de inicialización antes de que el programa comience a ejecutarse.
var a string
func init() {
fmt.Println("Incializa la variable")
a = 1
}
func main() {
fmt.Printf("Valor de a: %d\n", a)
} Orden de ejecución
Se ha de tener en cuenta que la función init() no se ejecuta antes que cualquier otra función. En realidad solo se ejecuta antes de la función main(). por ejemplo:
var valor = AsignaValor()
func asignaValor() int {
return 42
}
func init() {
valor = 0
}
func main() {
fmt.Println("El valor es %d\n", valor)
} El resultado es 0 porque asignaValor() se ejecuta antes que init() e init() se ejecuta antes que main().
init() en los paquetes
Es importante saber que siempre se llama a init(), independientemente de si hay un archivo principal o no, por lo que si se importa un paquete que tiene una función init(), se ejecutará.
Además, se puede tener varias funciones init() por paquete; se ejecutarán en el orden en que aparecen en el archivo. Este diagrama es muy clarificador:
Varias funciones init()
Finalmente, pueden haber dos funciones init() en un package
var counter int
func init() {
counter++
}
func init() {
counter++
}
func main() {
fmt.Printf("Contador: %d\n", counter)
} El resultado será 2 debido a las inicializaciones. ¿Para qué puede servir esto? Principalmente para dividir grandes bloques de código de inicialización y evitar tener código monolítico.
