Heim > Artikel > Backend-Entwicklung > 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 ansehenDas 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!