Maison > développement back-end > Golang > Pourquoi est-ce que j'obtiens des erreurs « Variable non déclarée » dans les instructions conditionnelles Go ?

Pourquoi est-ce que j'obtiens des erreurs « Variable non déclarée » dans les instructions conditionnelles Go ?

DDD
Libérer: 2024-11-26 11:44:10
original
924 Les gens l'ont consulté

Why Am I Getting

Erreurs de déclaration de variable dans les instructions conditionnelles : résoudre le problème des « variables non déclarées »

Dans Go, les variables doivent être déclarées avant de pouvoir être utilisé. Cette règle est vraie même dans les instructions conditionnelles comme if...else. La déclaration de variables à l'intérieur de blocs conditionnels peut entraîner des erreurs, comme vous l'avez rencontré.

Comprendre la portée des variables dans Go

Les variables dans Go ont une portée limitée, ce qui signifie qu'elles ne sont que accessibles dans le bloc où ils sont déclarés. Par exemple :

package main

import "fmt"

func main() {
    a := 1
    fmt.Println(a)
    {
        a := 2
        fmt.Println(a)
    }
    fmt.Println(a)
}
Copier après la connexion

Dans ce code, la variable a est déclarée deux fois, une fois à l'extérieur du bloc interne et une fois à l'intérieur de celui-ci. La déclaration interne crée une portée distincte et la valeur de a à l'intérieur du bloc n'est pas visible par la portée externe.

Déclaration de variables en dehors des instructions conditionnelles

Pour résoudre le erreur que vous avez rencontrée, vous devez déclarer les variables req et er en dehors de l'instruction if...else. Cela permet à ces variables d'être accessibles dans tout le bloc :

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)
    }
}
Copier après la connexion

Dans ce code mis à jour, req et er sont déclarés en dehors de l'instruction conditionnelle, les rendant accessibles à la fois dans les branches if et else. Cela résout l'erreur de compilation que vous rencontriez.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal