Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Erläuterung der Init-Funktion in der Go-Sprache

Detaillierte Erläuterung der Init-Funktion in der Go-Sprache

尚
nach vorne
2019-11-30 14:41:123974Durchsuche

Detaillierte Erläuterung der Init-Funktion in der Go-Sprache

Die Init-Funktion in der Go-Sprache wird zum Initialisieren des Pakets verwendet. Diese Funktion ist eine wichtige Funktion der Go-Sprache Funktionen:

1 Die Init-Funktion ist eine Funktion, die zum Initialisieren des Pakets vor der Programmausführung verwendet wird, z. B. zum Initialisieren von Variablen im Paket usw.

2 Jedes Paket kann mehrere Init-Funktionen haben

3 Jede Quelldatei eines Pakets kann auch mehrere Init-Funktionen haben

4 Die Ausführungsreihenfolge mehrerer Init-Funktionen im selben Paket ist in der Go-Sprache nicht klar definiert (Erklärung)

5 Die Init-Funktionen verschiedener Pakete bestimmen die Ausführungsreihenfolge der Initialisierungsfunktionen entsprechend den vom Paket importierten Abhängigkeiten

6 Die Init-Funktion kann nicht von anderen Funktionen aufgerufen werden, sondern wird automatisch vor der Hauptfunktion aufgerufen wird ausgeführt

Das folgende Beispiel ist ein Auszug aus „the way to go“. Die Betriebssystemunterschiede werden während der Anwendungsinitialisierung ausgeblendet.

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")
    }
}

Die folgenden zwei Go-Dateien zeigen:

1 Ein Paket oder die GO-Datei kann mehrere Init-Funktionen enthalten.

2 Die Init-Funktion wird vor der Hauptfunktion ausgeführt.

3 Die Init-Funktion wird automatisch aufgerufen und kann nicht explizit in anderen Funktionen aufgerufen werden Der Aufruf meldet, dass die Funktion undefiniert ist

gprog.go-Code

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()
}

ginit1.go-Code. Beachten Sie, dass diese Quelldatei zwei Init-Funktionen enthält

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")
}

Kompilieren Die beiden oben genannten Dateien: go build gprog.go ginit1.go

Das Ergebnis der Ausführung von gprog.exe nach der Kompilierung zeigt, dass zuerst die Init-Funktion in gprog.go und dann die beiden Init-Funktionen in ginit1 ausgeführt werden. go werden ausgeführt. Anschließend wird die Hauptfunktion ausgeführt.

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

Hinweis: In „The way to go“ (P70) gibt es unten eine Beschreibung in Rot, was bedeutet, dass eine Go-Quelldatei nur eine Init-Funktion haben kann,

aber die oben genannte ginit1. Die beiden Init-Funktionen in go werden nach dem Kompilieren und Ausführen normal ausgeführt.

Daher sollte dieser Satz ein Tippfehler sein.

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.

Empfohlen:

Video-Tutorial ansehen

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der Init-Funktion in der Go-Sprache. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:cnblogs.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen