Maison  >  Article  >  développement back-end  >  Pourquoi ne puis-je pas accéder aux variables déclarées dans les instructions conditionnelles dans Go ?

Pourquoi ne puis-je pas accéder aux variables déclarées dans les instructions conditionnelles dans Go ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-09 18:19:02578parcourir

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

Variables déclarées dans des instructions conditionnelles

Vous avez rencontré un problème où les variables déclarées dans des instructions conditionnelles (if...else) ne sont pas reconnu. En effet, les variables dans Go ont une portée spécifique, qui est définie par le bloc dans lequel elles sont déclarées.

Portée de la variable

Dans votre exemple, vous déclarez req et er dans les branches de l'instruction conditionnelle. Cependant, cela signifie que ces variables ne sont visibles qu’au sein de ces branches spécifiques. Go vous demande de déclarer les variables dans la portée où elles sont destinées à être utilisées.

Solution

Pour résoudre ce problème, déclarez req et er en dehors de l'instruction conditionnelle afin qu'ils soient visibles tout au long de la fonction :

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

Comprendre les Syntaxe

La différence entre = et := dans Go est importante. = est utilisé pour attribuer une valeur à une variable existante, tandis que := est utilisé pour déclarer et attribuer une variable dans la même ligne.

Cela signifie que si vous déclarez une variable avec =, vous devez déjà avoir déclaré dans la même portée ou dans une portée parent, tandis que := déclare et initialise une variable dans une seule instruction.

Dans ce cas, puisque vous souhaitez introduire de nouvelles variables dans la fonction, := est la syntaxe appropriée à utiliser.

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