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!