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
Barbara StreisandOriginal
2024-12-13 08:04:10809Durchsuche

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)
    }
}

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")

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")

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")

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!

Stellungnahme:
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