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