Maison >développement back-end >Golang >Quand exactement la fonction `init()` de Go s'exécute-t-elle ?

Quand exactement la fonction `init()` de Go s'exécute-t-elle ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-20 22:41:16243parcourir

When Exactly Does Go's `init()` Function Run?

Quand la fonction init() s'exécute-t-elle ?

La fonction init() est une fonction spéciale dans Go qui est appelée avant la fonction principale () fonction du package. Il est couramment utilisé pour initialiser des variables et d'autres tâches de configuration. Mais que signifie exactement la phrase suivante d'Effective Go :

"Et enfin signifie enfin : init est appelé après que toutes les déclarations de variables du package ont évalué leurs initialiseurs, et ceux-ci ne sont évalués qu'après que tous les packages importés ont été initialisés."

Cela signifie que la fonction init() s'exécute une fois que toutes les variables globales du package actuel, ainsi que tous les packages importés, ont été initialisées avec leurs valeurs par défaut. Il est important de noter que l'ordre d'initialisation est basé sur l'ordre lexical des fichiers du package, plutôt que sur l'ordre dans lequel les importations sont déclarées.

À titre d'exemple :

var GlobalVar1 = 10

func init() {
    GlobalVar1 = 20
}

func main() {
    // GlobalVar1 is 20
}

Dans cet exemple, la fonction init() est appelée après que GlobalVar1 a été initialisée à 10, et elle remplace la valeur de GlobalVar1 à 20 avant que la fonction main() ne soit appelé.

Il convient de mentionner que la fonction init() est toujours appelée, que le package ait ou non une fonction main(). Cela signifie que si vous importez un package doté d'une fonction init(), il sera exécuté avant la fonction init() de votre propre package.

De plus, plusieurs fonctions init() peuvent être définies dans un seul package. package, et ils seront exécutés dans l’ordre dans lequel ils apparaissent dans le fichier source. Cela vous permet d'effectuer plusieurs tâches d'initialisation dans un ordre spécifique.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn