95 votes

Opérateur d'assignation dans le langage Go

Dernièrement, j'ai joué avec le nouveau langage de programmation de Google. Allez sur et je me demandais pourquoi l'opérateur d'affectation := a un côlon 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" ?

131voto

Fabien Points 1887

En := sert à la fois de déclaration et d'initialisation.

foo := "bar"

est équivalent à

var foo = "bar"

Pourquoi ne pas utiliser uniquement foo = "bar" comme dans n'importe quel langage de script, vous pouvez vous 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' ?

47voto

Joonazan Points 1036
name := "John"

est juste un sucre syntaxique pour

var name string
name = "John"

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

22voto

peterSO Points 25725

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

Déclarations courtes de variables

Une déclaration de variable courte utilise la syntaxe :

ShortVarDecl = IdentifierList ":=" ExpressionList .

Il s'agit d'un raccourci pour une déclaration de variable régulière avec des expressions d'initialisation mais sans types. mais sans types :

"var" IdentifierList = ExpressionList .

Assignations

Assignment = ExpressionList assign_op ExpressionList .

assign_op = [ add_op | mul_op ] "=" .

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

16voto

user2418306 Points 1476

Rob Pike explique pourquoi Go a := lors de sa conférence "Origines du go" (2010).

:= était un pseudo-opérateur dans un autre langage codé par Pike appelé Newsquek (1989). Ce langage avait une notation de type Pascal et la possibilité de déduire le type pour l'idiome declare and initialize ( page 15 )

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

Note marginale : Robert Griesemer fait apparaître := opérateur répondant à la question "Quelle est la chose que vous retirez de Go ?" lors de la session d'assurance qualité à Google I/O 2013. En y faisant référence comme pratique mais problématique .

7voto

maria s Points 231

Il y a au moins une différence subtile entre

name := "John"

et

var name = "John"

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X