Heim > Backend-Entwicklung > Golang > Warum bleibt meine globale Go-Fehlervariable nach der Initialisierung Null?

Warum bleibt meine globale Go-Fehlervariable nach der Initialisierung Null?

Susan Sarandon
Freigeben: 2024-12-11 19:10:16
Original
502 Leute haben es durchsucht

Why Does My Go Global Error Variable Remain Nil After Initialization?

Globale Fehlervariable bleibt 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)
    }
}
Nach dem Login kopieren

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()
    }
    // ...
}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage