web-dev-qa-db-fra.com

Opérateur d'affectation en langue Go

Dernièrement, je jouais avec le nouveau langage de programmation de Google Aller

et se demandait pourquoi l'opérateur d'affectation := a deux points devant le signe égal = Y a-t-il une raison particulière pour laquelle les auteurs de la langue ont voulu utiliser name := "John" au lieu de name = "John"

75
Nenad

La notation := Sert à la fois de déclaration et d'initialisation.

foo := "bar"

est équivalent à

var foo = "bar"

Pourquoi ne pas utiliser seulement foo = "bar" Comme dans n'importe quel langage de script, vous pouvez demander? Eh bien, c'est pour éviter les fautes de frappe.

foo = "bar"
fooo = "baz" + foo + "baz"   // Oops, is fooo a new variable or did I mean 'foo' ?
111
Fabien
name := "John"

est juste du sucre syntaxique pour

var name string
name = "John"

Go est typé statiquement, vous devez donc déclarer des variables.

33
Joonazan

:= n'est pas l'opérateur d'affectation. C'est une courte déclaration de variable. = est l'opérateur d'affectation.

Déclarations de variables courtes

Une courte déclaration de variable utilise la syntaxe:

ShortVarDecl = IdentifierList ":=" ExpressionList .

C'est un raccourci pour une déclaration de variable régulière avec des expressions d'initialisation mais pas de types:

"var" IdentifierList = ExpressionList .

Affectations

Assignment = ExpressionList assign_op ExpressionList .

assign_op = [ add_op | mul_op ] "=" .

Dans Go, name := "John" est un raccourci pour var name = "John".

18
peterSO

Rob Pike explique pourquoi Go a := lors de sa conférence "Origins of Go" (2010).

:= était un pseudo-opérateur dans une autre langue signée par Pike, appelée Newsquek (1989). Qui avait la notation Pascal-ish et la capacité d'inférer le type pour déclarer et initialiser l'idiome ( page 15 )

// variable: [type] = value
x: int = 1
x := 1

Note marginale: Robert Griesemer évoque:= opérateur répondant à la question "Quelle serait une chose que vous retireriez de Go?" lors de la session QA à Google I/O 2013. Se référant à cela comme pratique mais problématique .

10
user2418306

Les deux sont les différentes techniques de déclaration de variables en langage Go.

var name = "John" // is a variable declaration 

ET

name := "John"   // is a short variable declaration. 

Une déclaration de variable courte est un raccourci pour une déclaration de variable régulière avec des expressions d'initialisation mais pas de types.

Lisez ci-dessous pour plus de détails:

Déclarations variables

Déclarations de variables courtes

4
Pravin Mishra

Contexte important pour la réponse:

:= est un opérateur abrégé pour initialiser une variable. Dans Go, les opérations suivantes sont équivalentes:

var myNumb String = "one"
myNumb := "one"

Réponse:

La question implicite est maintenant: "Pourquoi est-ce que vous avez conçu la notation raccourcie := avoir un : avant le =? ". La raison est d'empêcher les fautes de frappe courantes. Si l'opérateur d'affectation de raccourci était simplement =, alors vous pourriez avoir la situation suivante:

var myNumb String = "one"
myNumb = "two"

L'utilisateur qui a créé ce code a-t-il maintenant l'intention de réaffecter two à myNumb, ou a-t-il mal saisi myNumb au lieu de taper correctement myNumbTwo? En incluant les deux points dans :=, le programmeur devrait commettre deux erreurs (oublier les deux points et oublier le var) afin d'avoir un bug, diminuant ainsi la probabilité de le faire drastiquement.

2
Webeng

Il y a au moins une différence subtile entre

name := "John"

et

var name = "John"

La première est une instruction non déclarative et n'est pas autorisée en dehors d'un corps de fonction, tandis que la seconde est une instruction valide au niveau du package.

2
maria s