Heim >Backend-Entwicklung >Golang >Warum bleibt meine globale Go-Fehlervariable nach der Initialisierung Null?
Beim Versuch, eine Fehlervariable global zu initialisieren, stoßen einige Benutzer möglicherweise auf ein rätselhaftes Problem, bei dem die Variable in nachfolgenden Funktionen darin Null bleibt das gleiche Paket, was zu unerwartetem Programmverhalten führt. Dieses Problem ergibt sich aus der Art und Weise, wie globale Variablen in Go initialisiert werden.
Im folgenden Beispiel besteht das Ziel darin, eine globale Fehlervariable „loadErr“ zu initialisieren und in einer anderen Funktion checkErr() auf Fehler zu prüfen:
package main import ( "os" "fmt" ) var loadErr error func main() { f, loadErr := os.Open("asdasd") if loadErr != nil { checkErr() } if f != nil { fmt.Println(f.Name()) } } // panic won't be called because loadErr is nil func checkErr() { if loadErr != nil { panic(loadErr) } }
Das Problem tritt jedoch auf, weil checkErr() einen Nullwert für loadErr erhält. Dies liegt daran, dass die in main() erstellte Variable („loadErr := os.Open('asdasd')“) eine lokale Variable innerhalb von main() ist und die globale Variable zu diesem Zeitpunkt noch nicht initialisiert ist.
Um dieses Problem zu lösen, sollte man beim Zuweisen des Werts zur globalen Variablen eine einfache Zuweisung ("=") anstelle einer Deklaration und Initialisierung (":=") verwenden:
// ... func main() { _, loadErr = os.Open("asdasd") // ^ Replaced := with = if loadErr != nil { checkErr() } // ... }
Durch die Verwendung von „="-Operator, Der globalen Variablen „loadErr“ wird explizit der Fehlerwert zugewiesen, wodurch sichergestellt wird, dass sie für andere Funktionen innerhalb des Pakets zugänglich ist.
Das obige ist der detaillierte Inhalt vonWarum bleibt meine globale Go-Fehlervariable nach der Initialisierung Null?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!