Si desea utilizar un tipo específico x := uint32(123)funciona, por ejemplo. Debe ser obvio para la mayoría de las personas, pero tuve que pensar unos minutos ;-)
Entonces, ¿significa variable con tipo inferido? ¿Derecha?
Krupal Shah
@KrupalShah el enlace a los documentos dice literalmente que: "Es la abreviatura de una declaración de variable regular con expresiones de inicializador pero sin tipos:" golang.org/ref/spec#Short_variable_declarations
akshaynagpal
1
Parece que :=está listado como operador aquí golang.org/ref/spec#Operators_and_punctuation , por lo que no estoy seguro de estar de acuerdo en que "en :=realidad no es un operador"
Powers
347
En Go, :=es para declaración + asignación, mientras que =es solo para asignación.
Por ejemplo, var foo int = 10 es lo mismo que foo := 10.
¿Hay un caso de uso en =lugar de :=? ¿Deberías usar siempre :=?
Kenny Worden
3
@KennethWorden Go no le permitirá usar :=para asignar a una variable que ya ha sido declarada, a menos que esté asignando a múltiples variables a la vez, y al menos una de esas variables es nueva.
Kenny Bania
55
el intque no se requiere, var foo = 10es la misma quefoo := 10
Gary Lyn
@KennyWorden, sí. No puede usar: = fuera de una función.
Karuhanga
106
Como ya han explicado otros, :=es tanto para la declaración, la asignación y también para la redeclaración; y adivina ( infiere ) el tipo de variable automáticamente.
Por ejemplo, foo := 32es una forma abreviada de:
var foo int
foo =32// OR:var foo int=32// OR:var foo =32
/ * Hay algunas reglas: * /
★ primera regla:
No se puede utilizar :=fuera de funcs. Es porque, de cualquier función, una declaración debe comenzar con una palabra clave.
// no keywords below, illegal.
illegal :=42// `var` keyword makes this statement legal.var legal =42
func foo(){
alsoLegal :=42// reason: it's in a func scope.}
★ segunda regla:
No puede usarlos dos veces ( en el mismo alcance ):
legal :=42
legal :=42// <-- error
Porque, :=introduce "una nueva variable" , por lo tanto, usarla dos veces no declara una segunda variable, por lo que es ilegal.
★ 3ra regla:
Puede usarlos para declaraciones y asignaciones de variables múltiples:
foo, bar :=42,314
jazz, bazz :=22,7
★ 4ta Regla (Redeclaración):
Puede usarlos dos veces en declaraciones "multi-variables" , si una de las variables es nueva :
foo, bar := someFunc()
foo, jazz := someFunc()// <-- jazz is new
baz, foo := someFunc()// <-- baz is new
Esto es legal, porque no estás declarando todas las variables, solo estás reasignando nuevos valores a las variables existentes y declarando nuevas variables al mismo tiempo. Esto se llama redeclaración .
★ 5ta regla:
Puede usar la declaración breve para declarar una variable en un ámbito más nuevo, incluso si esa variable ya se ha declarado con el mismo nombre antes:
var foo int=34
func some(){// because foo here is scoped to some func
foo :=42// <-- legal
foo =314// <-- legal}
Aquí, foo := 42es legal, porque se declara fooen some()el alcance de la función. foo = 314es legal porque simplemente asigna un nuevo valor a foo.
★ sexta regla:
Puede declarar el mismo nombre en bloques de instrucciones breves como: if , for , switch :
foo :=42if foo := someFunc(); foo ==314{// foo is scoped to 314 here// ...}// foo is still 42 here
Porque, fooen if foo := ..., solo pertenece a esa ifcláusula y está en un alcance diferente.
Entonces, como regla general: si desea declarar fácilmente una variable que puede usar :=, o, si solo desea sobrescribir una variable existente, puede usarla =.
«= Es operador de asignación. Se usa de la misma manera que lo usarías en cualquier otro idioma ». Excepto en Ada, donde =es solo para comparación y :=es para asignación ...
Alexis Wilke
13
El: = significa declarar y asignar, mientras que el = significa simplemente asignar.
x := uint32(123)
funciona, por ejemplo. Debe ser obvio para la mayoría de las personas, pero tuve que pensar unos minutos ;-)Respuestas:
Solo
=
es el operador de asignación.:=
es parte de la sintaxis de la cláusula de declaraciones de variables cortas .Though Sin embargo, hay algunas reglas. Vea esta otra respuesta para más detalles.
fuente
:=
está listado como operador aquí golang.org/ref/spec#Operators_and_punctuation , por lo que no estoy seguro de estar de acuerdo en que "en:=
realidad no es un operador"En Go,
:=
es para declaración + asignación, mientras que=
es solo para asignación.Por ejemplo,
var foo int = 10
es lo mismo quefoo := 10
.fuente
=
lugar de:=
? ¿Deberías usar siempre:=
?:=
para asignar a una variable que ya ha sido declarada, a menos que esté asignando a múltiples variables a la vez, y al menos una de esas variables es nueva.int
que no se requiere,var foo = 10
es la misma quefoo := 10
Como ya han explicado otros,
:=
es tanto para la declaración, la asignación y también para la redeclaración; y adivina ( infiere ) el tipo de variable automáticamente.Por ejemplo,
foo := 32
es una forma abreviada de:/ * Hay algunas reglas: * /
★ primera regla:
No se puede utilizar
:=
fuera defuncs
. Es porque, de cualquier función, una declaración debe comenzar con una palabra clave.★ segunda regla:
No puede usarlos dos veces ( en el mismo alcance ):
Porque,
:=
introduce "una nueva variable" , por lo tanto, usarla dos veces no declara una segunda variable, por lo que es ilegal.★ 3ra regla:
Puede usarlos para declaraciones y asignaciones de variables múltiples:
★ 4ta Regla (Redeclaración):
Puede usarlos dos veces en declaraciones "multi-variables" , si una de las variables es nueva :
Esto es legal, porque no estás declarando todas las variables, solo estás reasignando nuevos valores a las variables existentes y declarando nuevas variables al mismo tiempo. Esto se llama redeclaración .
★ 5ta regla:
Puede usar la declaración breve para declarar una variable en un ámbito más nuevo, incluso si esa variable ya se ha declarado con el mismo nombre antes:
Aquí,
foo := 42
es legal, porque se declarafoo
ensome()
el alcance de la función.foo = 314
es legal porque simplemente asigna un nuevo valor afoo
.★ sexta regla:
Puede declarar el mismo nombre en bloques de instrucciones breves como: if , for , switch :
Porque,
foo
enif foo := ...
, solo pertenece a esaif
cláusula y está en un alcance diferente.Referencias
Reglas de declaración variable corta
Una guía visual para ir variables
fuente
:=
es una abreviatura para la declaración.a
será declarado comoint
e inicializado con valor10
donde comob
será declarado como una cadena e inicializado con valorgopher
.Sus equivalentes usando
=
serían=
es operador de asignación. Se usa de la misma manera que lo usarías en cualquier otro idioma.Puede omitir el tipo cuando declara la variable y hay un inicializador presente ( http://tour.golang.org/#11 ).
fuente
=
es solo para comparación y:=
es para asignación ...El: = significa declarar y asignar, mientras que el = significa simplemente asignar.
fuente
:=
declara y asigna,=
solo asignaEs útil cuando no desea llenar su código con declaraciones de tipo o estructura.
fuente
del documento de referencia: ( tour.golang.org )
Dentro de una función , la
:=
declaración de asignación corta se puede usar en lugar de una declaración var con tipo implícito.Fuera de una función , cada construcción comienza con una palabra clave (var, func, etc.) y la construcción: = no está disponible.
fuente
“: =” Se usa para hacer la declaración y la inicialización al mismo tiempo, a continuación se muestra un ejemplo.
Uso de "="
var i int
i = 10
https://play.golang.org/p/RU88ty_SGa
Uso de ": ="
i: = 10
https://play.golang.org/p/XBdjBh-DQB
fuente
Ambas son la técnica diferente de declaración de variables en el lenguaje Go.
Y
Una declaración de variable corta es una abreviatura de una declaración de variable regular con expresiones de inicializador pero sin tipos.
Lea a continuación para más detalles:
Declaraciones variables
Declaraciones de variables cortas
fuente