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 = 10es 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.intque no se requiere,var foo = 10es la misma quefoo := 10Como 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:/ * 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 := 42es legal, porque se declarafooensome()el alcance de la función.foo = 314es 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,
fooenif foo := ..., solo pertenece a esaifclá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.aserá declarado comointe inicializado con valor10donde comobserá 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