Heim  >  Artikel  >  Backend-Entwicklung  >  Warum kann ich in Go nicht auf Variablen zugreifen, die in bedingten Anweisungen deklariert sind?

Warum kann ich in Go nicht auf Variablen zugreifen, die in bedingten Anweisungen deklariert sind?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-09 18:19:02595Durchsuche

Why Can't I Access Variables Declared Inside Conditional Statements in Go?

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!

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