Maison > développement back-end > Golang > Comment accéder aux constantes ou aux variables au niveau du package lorsqu'une variable locale portant le même nom existe dans Go ?

Comment accéder aux constantes ou aux variables au niveau du package lorsqu'une variable locale portant le même nom existe dans Go ?

Mary-Kate Olsen
Libérer: 2024-11-16 11:21:03
original
907 Les gens l'ont consulté

How to Access Package-Level Constants or Variables When a Local Variable with the Same Name Exists in Go?

Référencement de constantes ou de variables au niveau du package par rapport aux variables au niveau de la fonction

Dans Go, la portée des variables détermine leur accessibilité dans différents blocs de code. Lorsque des variables locales et des constantes de niveau supérieur ou des variables au niveau du package partagent le même nom, un problème courant se pose : comment faire référence à la variable constante ou au niveau du package au lieu de la variable locale ?

Le problème

Considérez le programme Go suivant :

package main

import "fmt"

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

func main() {
    name := "Jobs"
    fmt.Println(name)
}
Copier après la connexion

Ce programme déclare un nom de constante au niveau du package, mais dans la fonction principale, une autre variable nommée name est déclarée au niveau de la fonction. Lorsque le programme s'exécute, il imprime « Jobs », qui est la valeur du nom de la variable locale au niveau de la fonction. Comment pouvez-vous accéder au nom de la constante au niveau du package à la place ?

Aucune référence directe

Malheureusement, Go ne fournit pas de moyen direct de faire référence aux identifiants de niveau supérieur dans la portée d'un bloc où une variable locale du même nom existe. Selon la spécification Go pour les déclarations et la portée, un identifiant déclaré localement est prioritaire dans sa portée.

Solutions de contournement

Pour accéder à la fois à la variable de niveau supérieur et à la variable locale, vous pouvez utiliser noms différents ou utilisez l'une des solutions de contournement suivantes :

Enregistrer d'abord la valeur de niveau supérieur

cname := name
name := "Jobs"
fmt.Println(name)
fmt.Println(cname)
Copier après la connexion

Cette méthode enregistre la valeur de la constante ou de la variable de niveau supérieur avant de créer la variable locale .

Utiliser une fonction pour accéder à la valeur de niveau supérieur

func getName() string {
    return name
}

name := "Jobs"
fmt.Println(name)
fmt.Println(getName())
Copier après la connexion

Cette approche fournit une autre façon d'accéder à la variable de niveau supérieur en définissant une fonction qui renvoie sa valeur.

Output

Les deux méthodes renvoient le même résultat :

Jobs
Yosua
Copier après la connexion

Cela démontre que vous pouvez accéder à la variable de niveau supérieur tout en utilisant une variable locale du même nom en utilisant une de ces solutions de contournement. Cependant, il est important de se rappeler que les variables locales ont priorité sur les identifiants de niveau supérieur dans leur portée.

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal