Maison  >  Article  >  développement back-end  >  Explication détaillée de la fonction init en langage Go

Explication détaillée de la fonction init en langage Go

尚
avant
2019-11-30 14:41:123915parcourir

Explication détaillée de la fonction init en langage Go

La fonction init du langage go est utilisée pour initialiser le package. Cette fonction est une fonctionnalité importante du langage go

a les éléments suivants. Caractéristiques :

1 La fonction init est une fonction utilisée pour initialiser le package avant l'exécution du programme, comme l'initialisation des variables dans le package, etc.

2 Chaque package peut avoir plusieurs fonctions d'initialisation

3 Chaque fichier source d'un package peut également avoir plusieurs fonctions d'initialisation

4 L'ordre d'exécution de plusieurs fonctions d'initialisation dans un même package n'est pas clairement défini (explication) dans le langage Go

5 Les fonctions init des différents packages déterminent l'ordre d'exécution des fonctions d'initialisation en fonction des dépendances importées par le package

6 La fonction init ne peut pas être appelée par d'autres fonctions, mais est automatiquement appelée avant la fonction principale est exécuté

L'exemple suivant est extrait de "la voie à suivre". Les différences entre les systèmes d'exploitation sont masquées lors de l'initialisation de l'application

var prompt = "Enter a digit, e.g. 3 " + "or %s to quit."

func init() {
    if runtime.GOOS == "windows" {
        prompt = fmt.Sprintf(prompt, "Ctrl+Z, Enter")
    } else { // Unix-like
        prompt = fmt.Sprintf(prompt, "Ctrl+D")
    }
}

Les deux fichiers go suivants le démontrent :

1 Un package Ou le fichier go peut contenir plusieurs fonctions init,

2 la fonction init est exécutée avant la fonction principale,

3 la fonction init est automatiquement appelée et ne peut pas être appelée dans d'autres fonctions, explicitement L'appel signalera que la fonction n'est pas définie

code gprog.go

package main

import (
    "fmt"
)

// the other init function in this go source file
func init() {
    fmt.Println("do in init")
}

func main() {
    fmt.Println("do in main")
}

func testf() {
    fmt.Println("do in testf")
    //if uncomment the next statment, then go build give error message : .\gprog.go:19: undefined: init
    //init()
}

code ginit1.go Notez qu'il y a deux fonctions d'initialisation dans ce fichier source

package main

import (
    "fmt"
)

// the first init function in this go source file
func init() {
    fmt.Println("do in init1")
}

// the second init function in this go source file
func init() {
    fmt.Println("do in init2")
}

Compile. les deux fichiers ci-dessus : go build gprog.go ginit1.go

Le résultat de l'exécution de gprog.exe après la compilation montre que la fonction init dans gprog.go est exécutée en premier, puis les deux fonctions init dans ginit1. go sont exécutés. Ensuite, la fonction principale est exécutée.

E:\opensource\go\prj\hellogo>gprog.exe
do in init
do in init1
do in init2
do in main

Remarque : Dans "le chemin à parcourir" (P70), il y a une description en rouge ci-dessous, ce qui signifie qu'un fichier source go ne peut avoir qu'une seule fonction d'initialisation,

mais celle ci-dessus ginit1. Les deux fonctions init de go sont exécutées normalement après la compilation et l'exécution

Par conséquent, cette phrase devrait être une faute de frappe.

4.4.5 Init-functions
Apart from global declaration with initialization, variables can also be initialized in an init()-function.
This is a special function with the name init() which cannot be called, but is executed automatically
before the main() function in package main or at the start of the import of the package that
contains it.
Every source file can contain only 1 init()-function. Initialization is always single-threaded and
package dependency guarantees correct execution order.

Recommandé : aller au tutoriel vidéo

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:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer