Maison  >  Article  >  développement back-end  >  Comment accéder à une constante ou une variable de niveau supérieur dans Go lorsqu'une variable locale du même nom existe ?

Comment accéder à une constante ou une variable de niveau supérieur dans Go lorsqu'une variable locale du même nom existe ?

DDD
DDDoriginal
2024-11-15 19:40:03703parcourir

How do I access a top-level constant or variable in Go when a local variable with the same name exists?

Faire référence à des variables au niveau d'une constante ou d'un package dans la portée de la fonction

Dans Go, il est possible de déclarer des variables avec différentes portées : locale (portée de la fonction) et de niveau supérieur (portée du package ou du fichier). Parfois, vous pouvez rencontrer une situation dans laquelle vous souhaitez faire référence à une constante ou une variable de niveau supérieur dans la portée de la fonction, où une variable locale portant le même nom existe.

Considérez l'extrait de code suivant :

package main

import "fmt"

const name = "Yosua"
// or var name string = "James"

func main() {
    name := "Jobs"
    fmt.Println(name)
}

Question : Comment pouvons-nous faire référence au nom de la constante au lieu du nom local variable?

Réponse :

L'accès à la variable de portée englobante en présence d'une variable locale du même nom n'est pas possible. Lorsque la variable locale est dans la portée, elle masque la variable externe dans la fonction, la rendant inaccessible.

La spécification du langage Go indique :

An identifier declared in a block may be redeclared in an inner block. While the identifier of the inner declaration is in scope, it denotes the entity declared by the inner declaration.

Alternatives :

Si vous devez accéder simultanément aux variables de niveau supérieur et locales, envisagez d'utiliser des noms distincts. Cependant, si cela n'est pas réalisable, vous pouvez recourir aux alternatives suivantes :

  1. Attribuer temporairement à une nouvelle variable :

    • Store la valeur de la variable de niveau supérieur dans une variable temporaire avant de l'attribuer à la variable locale.
    • Pour exemple :

      cname := name
      name := "Jobs"
      fmt.Println(name)
      fmt.Println(cname)
  2. Exposer indirectement la variable de niveau supérieur :

    • Créer une fonction ou méthode qui renvoie la valeur de la variable de niveau supérieur.
    • Pour exemple :

      func getName() string {
       return name
      }
      
      name := "Jobs"
      fmt.Println(name)
      fmt.Println(getName())

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