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

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

Barbara Streisand
Freigeben: 2024-12-13 08:04:10
Original
817 Leute haben es durchsucht

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

Globale Fehlervariable bleibt nach der Initialisierung Null: Aufdecken der Diskrepanz

Bedenken Sie den folgenden Code:

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

Verwirrend , gerät dieser Code nicht in Panik, auch wenn LoadErr gleich Null ist. Die gleiche Funktion checkErr() ist so definiert, dass sie in Panik gerät, wenn loadErr nicht Null ist. Was verursacht diese Diskrepanz?

Das gelüftete Geheimnis

Die Wurzel des Problems liegt in der subtilen Unterscheidung zwischen lokalen und globalen Variablen. Im ersten Codeausschnitt erstellt die Zeile:

f, loadErr := os.Open("asdasd")
Nach dem Login kopieren

eine neue, lokale LoadErr-Variable im Rahmen der Hauptfunktion. Diese lokale Variable unterscheidet sich vom globalen LoadErr, der außerhalb einer Funktion deklariert wird. Infolgedessen bleibt der globale LoadErr während der gesamten Ausführung des Codes unberührt und gleich Null.

Auflösen der Diskrepanz

Um das Problem zu beheben und sicherzustellen, dass der globale LoadErr vorhanden ist setze, ersetze := durch = in der oben genannten Zeile:

func main() {
    _, = os.Open("asdasd")
Nach dem Login kopieren

Diese Änderung weist den Wert von zu os.Open() direkt zum globalen LoadErr und setzt ihn dadurch korrekt auf den gewünschten Wert.

Zusätzlicher Hinweis

Wenn Sie den Wert von f as beibehalten möchten Nun, deklarieren Sie f außerhalb des Funktionsumfangs vor:

var f *os.File

func main() {
    f, = os.Open("asdasd")
Nach dem Login kopieren

Die Verwendung von := würde in diesem Fall eine lokale f-Variable erstellen und die in den Schatten stellen global.

Das obige ist der detaillierte Inhalt vonWarum bleibt meine globale Fehlervariable nach der Initialisierung in Go 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