web-dev-qa-db-fra.com

Qu'est-ce que "_" (virgule de soulignement) dans une déclaration Go?

Et je n'arrive pas à comprendre ce genre de déclaration de variable:

_, prs := m["example"]

Que fait exactement "_," et pourquoi ont-ils déclaré une variable comme celle-ci au lieu de

prs := m["example"]

(Je l'ai trouvé dans Aller par exemple: Cartes )

70
Kansuler

Cela évite d'avoir à déclarer toutes les variables pour les valeurs de retour.
Il est appelé identifiant vierge .

Un péché:

_, y, _ := coord(p)  // coord() returns three values; only interested in y coordinate

(le l'autre cas d'utilisation '_' est destiné à l'importation )

Puisqu'il ignore la valeur de retour, il est utile de ne vérifier qu'une seule des valeurs renvoyées, comme dans " Comment tester l'existence d'une clé dans une carte? " Affichée dans " Effective Go, map ":

_, present := timeZone[tz]

Pour tester la présence sur la carte sans vous soucier de la valeur réelle, vous pouvez utiliser l'identificateur vide, un simple trait de soulignement (_).
L'identifiant vide peut être attribué ou déclaré avec n'importe quelle valeur de n'importe quel type, la valeur étant supprimée de manière inoffensive.
Pour tester la présence dans une carte, utilisez l'identificateur vide à la place de la variable habituelle pour la valeur.

Comme (Jsor } _ ajoute dans les commentaires :

"norme généralement acceptée" consiste à appeler les variables de test d'appartenance "ok" (idem pour vérifier si une lecture de canal était valide ou non)

Cela vous permet de le combiner avec test:

if _, err := os.Stat(path); os.IsNotExist(err) {
    fmt.Printf("%s does not exist\n", path)
}

Vous le trouverez également en boucle:

Si vous avez seulement besoin du deuxième élément de la plage (la valeur), utilisez l'identificateur vide, un trait de soulignement, pour supprimer le premier:

sum := 0
for _, value := range array {
    sum += value
}
97
VonC

Le compilateur Go ne vous permettra pas de créer des variables que vous n'utiliserez jamais.

for i, value := range x {
   total += value
}

Le code ci-dessus renvoie un message d'erreur "i déclaré et non utilisé". 

Puisque nous n'utilisons pas i dans notre boucle, nous devons le changer en ceci: 

for _, value := range x {
   total += value
}
45
Juni Brosas

_ est l'identifiant vide. Ce qui signifie que la valeur à assigner est ignorée.

Ici, la valeur de la clé example est ignorée. La deuxième ligne de code éliminerait le presence boolean et stockerait la valeur dans prs.
Donc, pour ne vérifier que la présence sur la carte, vous pouvez ignorer la valeur. Ceci peut être utilisé pour utiliser une carte en tant qu'ensemble.

4
ThinkChaos

Fondamentalement, _, est connu sous le nom d'identificateur vide. Dans GO, nous ne pouvons pas avoir de variables qui ne sont pas utilisées.

En tant qu'instance lorsque vous parcourez un tableau si vous utilisez valeur: = plage vous ne voulez pas de valeur i pour effectuer une itération. Mais si vous omettez la valeur i, une erreur sera renvoyée. Mais si vous déclarez que je ne l'utilisais pas, une erreur serait également renvoyée.

C'est donc à cet endroit que nous devons utiliser _,.

En outre, il est utilisé lorsque vous ne souhaitez pas que la valeur de retour d'une fonction soit renvoyée à l'avenir.

1
Kaveen Hyacinth

C'est ce qu'on appelle l'identificateur vide et cela aide dans les cas où vous souhaitez supprimer la valeur qui va être renvoyée et ne pas la référencer

Quelques endroits où nous l'utilisons:

  • Une fonction renvoie une valeur et vous n’avez pas l’intention de l’utiliser dans le futur
  • Vous voulez itérer et avez besoin d’une valeur i que vous ne serez pas Using
1
Anagha

L'identificateur vide peut être utilisé chaque fois que la syntaxe requiert un nom de variable, mais pas la logique de programme, par exemple pour ignorer un index de boucle non souhaité lorsque nous ne demandons que la valeur de l'élément.

Extrait:

Le langage de programmation Go (série Addison-Wesley Professional Computing)

Brian W. Kernighan

Ce matériel peut être protégé par le droit d'auteur.

1
koopertrooper

Une variable non utilisée n'est pas autorisée dans Golang

Si vous veniez d'autres langages de programmation, cela pourrait sembler un peu difficile de s'y habituer. Mais cela se traduit par un code plus propre. Donc, en utilisant un _, nous disons que nous savons qu'il existe une variable mais que nous ne voulons pas l'utiliser et dire au compilateur que cela ne m'en veut pas. :)

0
Krishnadas PC