Maison >développement back-end >Golang >Comment l'observation variable se produit-elle dans les affectations et déclarations mixtes de Go ?

Comment l'observation variable se produit-elle dans les affectations et déclarations mixtes de Go ?

DDD
DDDoriginal
2024-12-22 04:43:11468parcourir

How Does Variable Shadowing Occur in Go's Mixed Assignments and Declarations?

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 :

  • Déclarer toutes les variables avant de les utiliser.
  • Utilisez des noms de variables différents.
  • Créez une nouvelle portée et stockez les valeur de la variable d'origine pour plus tard.

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

  • Déclarez toutes les variables avant de les utiliser, même dans les portées internes.
  • Séparez la mission et l'instruction if pour éviter l'observation.

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!

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