Observation de variables dans les affectations et déclarations mixtes Golang
L'utilisation de l'opérateur := dans Go peut entraîner un comportement inattendu lors de l'attribution de valeurs à variables. Bien qu'il permette une déclaration et une affectation simultanées, il peut également provoquer une observation de variable.
Observation de variable
Lorsque := est utilisé avec une variable existante dans une portée interne, une nouvelle valeur et un nouveau type sont associés à cette variable. Cela signifie que la variable d'origine est effectivement masquée dans cette portée.
Démonstration
a := 1 { a, b := 2, 3 } // This code will result in a compiler error because 'a' is already declared in the outer scope.
Dans cet exemple, la portée interne tente de redéclarer la variable a, ce qui est déjà déclaré dans la portée externe. Ceci n'est pas autorisé, d'où l'erreur du compilateur.
Solutions
Il existe plusieurs façons d'éviter l'observation des variables :
Comportement incohérent
Le problème peut également se produire à l'envers lors de la déclaration d'une variable dans une portée interne sans s'en rendre compte.
Démonstration
if _, err := fmt.Println(n); err != nil { panic(err) } // This code will result in a compiler error because 'err' is undefined.
Dans cet exemple, la variable err est déclarée mais non initialisée dans la portée interne. Cependant, la portée externe s'attend à ce qu'elle soit initialisée.
Solutions
Mixte Affectations et déclarations
Dans le cas d'affectations et déclarations mixtes, aucun nouveau périmètre n'est créé. Par conséquent, l'observation ne se produit pas.
Démonstration
a := 1 fmt.Println(&a) a, b := 2, 3 fmt.Println(&a) // This code will print the same address for 'a' in both cases.
Dans cet exemple, la variable b est déclarée et affectée d'une valeur simultanément, tandis que la valeur de l'existant la variable a est modifiée. L'adresse de a reste la même, indiquant qu'aucune observation ne s'est produite.
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!