„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Warum kann ich in Go keine Variablen in bedingten Anweisungen deklarieren?

Warum kann ich in Go keine Variablen in bedingten Anweisungen deklarieren?

Veröffentlicht am 09.11.2024
Durchsuche:482

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

Fehler: Variablendeklarationen in bedingten Anweisungen

Bei der ersten Begegnung mit Go kann es zu Verwirrung hinsichtlich der Variablendeklaration in bedingten Anweisungen kommen (z. B. if -anders). Dieses Problem tritt auf, wenn Variablen (z. B. req, er) innerhalb des bedingten Blocks deklariert und zugewiesen werden.

Variablenbereich: Blockebene verstehen

In Go sind Variablen innerhalb eines bestimmten Bereichs definiert, der auf den Block beschränkt ist, in dem sie deklariert sind. Betrachten Sie das folgende Beispiel:

package main

import "fmt"

func main() {
    a := 1
    fmt.Println(a)
    {
        // New scope
        a := 2
        fmt.Println(a)
    }
    fmt.Println(a) // Prints 1
}

Die Ausgabe zeigt, dass die Neuzuweisung des Werts von a innerhalb des verschachtelten Bereichs keinen Einfluss auf seinen Wert außerhalb dieses Bereichs hat. Dies liegt daran, dass a lokal im inneren Bereich deklariert wird, wodurch eine neue Instanz der Variablen erstellt wird, ähnlich wie:

var a int = 1
var b int = 2
fmt.Println(a)
fmt.Println(b)

Anwenden des Konzepts auf bedingte Anweisungen

Beim Versuch, Variablen in bedingten Anweisungen zu deklarieren:

if condition {
    var req *http.Request
    var er error
}

Es wird eine Fehlermeldung mit der Meldung „erforderlich deklariert und nicht verwendet“ oder „er deklariert und nicht verwendet“ angezeigt, da die Variablen nur innerhalb des Blocks der bedingten Anweisung sichtbar sind.

Lösung: Variablen außerhalb bedingter Blöcke deklarieren

Um dieses Problem zu beheben, sollten Variablen außerhalb des bedingten Blocks deklariert werden:

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

Auf diese Weise sind die Variablen in der gesamten Funktion verfügbar und stellen sicher, dass sie korrekt initialisiert werden. Denken Sie daran, dass der Variablenbereich in Go von entscheidender Bedeutung ist, um die Klarheit des Codes aufrechtzuerhalten und unerwartetes Verhalten zu verhindern.

Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3