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
Libérer: 2024-12-22 04:43:11
original
467 Les gens l'ont consulté

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.
Copier après la connexion

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.
Copier après la connexion

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.
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal