Maison >développement back-end >Golang >Comment déclarer des variables dans des instructions conditionnelles en Go ?

Comment déclarer des variables dans des instructions conditionnelles en Go ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-09 15:37:02505parcourir

How to Declare Variables in Conditional Statements in Go?

Portée des variables dans Go : déclaration de variables dans des instructions conditionnelles

Question :

Pendant l'apprentissage de Go, un développeur a eu du mal à déclarer des variables dans une instruction if...else, rencontrant des erreurs indiquant que les variables ont été déclarées mais non utilisées. Comment ce problème peut-il être résolu ?

Réponse :

Dans Go, la portée des variables est limitée au bloc dans lequel elles sont déclarées. Par conséquent, déclarer des variables dans des instructions conditionnelles ne les rend accessibles que dans ce bloc spécifique.

Pour comprendre ce concept, considérons l'exemple suivant :

package main

import "fmt"

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

Dans cet exemple, la variable a est déclarée deux fois : une fois à l’extérieur et une fois à l’intérieur d’un bloc. La première déclaration (a := 1) est valide pour l'ensemble de la fonction principale, tandis que la deuxième déclaration (a := 2) n'est valide que dans le bloc.

Ce comportement est analogue dans les instructions conditionnelles :

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 {
    // Do something...
}

Dans cet exemple, les variables req et er sont déclarées respectivement dans les branches if et else. Cependant, lorsque le programme sort de ces blocs, les variables ne sont plus accessibles.

Pour résoudre ce problème, déclarez les variables en dehors de l'instruction conditionnelle et utilisez l'opérateur d'affectation (=) pour modifier leurs valeurs :

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 {
    // Do something...
}

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