Maison >développement back-end >Golang >Comment fonctionne la fonction `init()` de Go dans l'initialisation du package ?

Comment fonctionne la fonction `init()` de Go dans l'initialisation du package ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-22 08:01:10491parcourir

How Does Go's `init()` Function Work in Package Initialization?

Init() dans Go : une explication précise

Lorsque vous travaillez avec le langage de programmation Go, il est essentiel de comprendre comment init() fonction fonctionne. Cette fonction joue un rôle crucial dans le processus d'initialisation des packages et de leurs dépendances.

Comme mentionné dans Effective Go :

"init est appelé une fois 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."

Cette instruction signifie que la fonction init() est exécutée une fois que toutes les variables du package ont été initialisé et après que tous les packages importés ont été initialisés. En initialisant des variables, cela signifie évaluer leurs initialiseurs.

Pour clarifier davantage, considérons le scénario suivant :

var WhatIsThe = AnswerToLife()

func AnswerToLife() int { // 1
    return 42
}

func init() { // 2
    WhatIsThe = 0
}

func main() { // 3
    if WhatIsThe == 0 {
        fmt.Println("It's all a lie.")
    }
}

Dans cet exemple :

  1. AnswerToLife() sera appelé avant init().
  2. AnswerToLife() renverra 42 et l'attribuera à WhatIsThe.
  3. init() sera alors appelé, et il réaffectera WhatIsThe à 0.
  4. Enfin, main() sera appelé, et il affichera "Tout est un mensonge".

Cela démontre que AnswerToLife() sera exécuté avant init() et init() sera exécuté avant main(). De plus, il souligne que init() exécutera toute la logique d'initialisation, telle que la définition des valeurs des variables, une fois que toutes les dépendances et variables du package auront été initialisées.

Il est important de noter que init() est toujours appelé, qu'il existe ou non une fonction main(). Par conséquent, si vous importez un package contenant une fonction init(), il sera exécuté. De plus, un package peut avoir plusieurs fonctions init(), et elles seront exécutées dans l'ordre dans lequel elles apparaissent dans le fichier.

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