Heim > Backend-Entwicklung > Golang > Warum schlägt die Initialisierung globaler Fehlervariablen in Go fehl?

Warum schlägt die Initialisierung globaler Fehlervariablen in Go fehl?

Barbara Streisand
Freigeben: 2024-12-14 14:51:18
Original
619 Leute haben es durchsucht

Why Does Global Error Variable Initialization Fail in Go?

Globaler Fehlervariablen-Initialisierungsfehler

In einem Go-Programm stellt die globale Initialisierung einer Fehlervariablen ein besonderes Problem dar, bei dem sie Null bleibt andere Funktionen innerhalb desselben Pakets. Um dieses Rätsel zu lösen, schauen wir uns ein konkretes Beispiel an:

package main</p>
<p>import (</p>
<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">"os"
"fmt"
Nach dem Login kopieren

)

var loadErr Fehler

func main() {

f, loadErr := os.Open("asdasd")
if loadErr != nil {
    checkErr()
}
if f != nil {
    fmt.Println(f.Name())
}
Nach dem Login kopieren

}

// Panic wird nicht aufgerufen, da LoadErr Null ist
func checkErr() {

if loadErr != nil {
    panic(loadErr)
}
Nach dem Login kopieren

}

In diesem Szenario würden Sie natürlich erwarten, dass der Code in Panik gerät, wenn die Datei dies nicht kann geöffnet werden. Entgegen den Erwartungen bleibt es jedoch stumm, da die Variable „loadErr“ gleich Null ist. Um dieses Problem zu lösen, muss eine entscheidende Unterscheidung getroffen werden.

In Go wird bei Verwendung des :=-Operators eine neue lokale Variable im Rahmen der Funktion erstellt. In diesem Fall erstellt die Zeile:

f, loadErr := os.Open("asdasd")

im Wesentlichen eine lokale Variable mit dem Namen „loadErr“, eindeutig aus der global deklarierten Variablen. Leider bleibt die globale Variable davon unberührt, was zum Nullwert-Rätsel führt.

Um dieses Problem zu beheben, muss der Operator := durch den Standardzuweisungsoperator = ersetzt werden. Dadurch wird sichergestellt, dass die globale Variable loadErr mit dem von os.Open() zurückgegebenen Wert referenziert und initialisiert wird:

func main() {</p>
<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">_, loadErr = os.Open("asdasd")
Nach dem Login kopieren

Durch diese subtile Änderung wird die globale Fehlervariable korrekt eingestellt und die Panikfunktion verhält sich nun wie folgt vorgesehen.

Falls Sie außerdem zwei Rückgabewerte von os.Open() benötigen, muss die zweite in der Zuweisung verwendete Variable vorher explizit deklariert werden:

var f *os .File<br>f, loadErr = os.Open("asdasd")<br>

Das obige ist der detaillierte Inhalt vonWarum schlägt die Initialisierung globaler Fehlervariablen in Go fehl?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Vorheriger Artikel:Was passiert mit unvollendeten Goroutinen, wenn die Haupt-Go-Routine beendet wird? Nächster Artikel:Wie definiere ich mehrere Tags in Go-Strukturen für MongoDB- und JSON-Marshalling?
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
Aktuelle Ausgaben
verwandte Themen
Mehr>
Beliebte Empfehlungen
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage