Heim > Artikel > Backend-Entwicklung > Warum kann ich in Go nicht auf Variablen zugreifen, die in bedingten Anweisungen deklariert sind?
In bedingten Anweisungen deklarierte Variablen
Sie sind auf ein Problem gestoßen, bei dem in bedingten Anweisungen (if...else) deklarierte Variablen nicht vorhanden sind anerkannt. Dies liegt daran, dass Variablen in Go einen bestimmten Bereich haben, der durch den Block definiert wird, in dem sie deklariert werden.
Variablenbereich
In Ihrem Beispiel deklarieren Sie req und er innerhalb der Zweige der bedingten Anweisung. Dies bedeutet jedoch, dass diese Variablen nur innerhalb dieser spezifischen Zweige sichtbar sind. Go erfordert, dass Sie Variablen in dem Bereich deklarieren, in dem sie verwendet werden sollen.
Lösung
Um dieses Problem zu beheben, deklarieren Sie req und er außerhalb der bedingten Anweisung so dass sie in der gesamten Funktion sichtbar sind:
var req *http.Request var er error if strings.EqualFold(r.Method, "GET") || strings.EqualFold(r.Method, "") { req, er = http.NewRequest(r.Method, r.Uri, b) } else { req, er = http.NewRequest(r.Method, r.Uri, b) } if er != nil { // we couldn't parse the URL. return nil, &Error{Err: er} } // add headers to the request req.Host = r.Host req.Header.Add("User-Agent", r.UserAgent) req.Header.Add("Content-Type", r.ContentType) req.Header.Add("Accept", r.Accept) if r.headers != nil { for _, header := range r.headers { req.Header.Add(header.name, header.value) } }
Syntax verstehen
Der Unterschied zwischen = und := in Go ist wichtig. = wird zum Zuweisen eines Werts zu einer vorhandenen Variablen verwendet, während := zum Deklarieren und Zuweisen einer Variablen in derselben Zeile verwendet wird.
Das bedeutet, dass Sie eine Variable bereits deklariert haben müssen, wenn Sie sie mit = deklarieren es im selben Bereich oder einem übergeordneten Bereich, während := eine Variable in einer einzelnen Anweisung deklariert und initialisiert.
Da Sie in diesem Fall neue Variablen innerhalb der Funktion einführen möchten, ist := die geeignete Syntax zu verwenden.
Das obige ist der detaillierte Inhalt vonWarum kann ich in Go nicht auf Variablen zugreifen, die in bedingten Anweisungen deklariert sind?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!