Diferencia entre: = y = operadores en Go


En Go, ¿cuál es la diferencia entre el operador = y :=? ¿Ambos parecen ser para una misión? Esto puede ser obvio, pero no puedo encontrarlo en los documentos.

 165
go
Author: Tim Cooper, 2013-07-27

9 answers

Solo = es el operador de asignación.

:= en realidad no es un operador en absoluto. Es parte de la sintaxis de la cláusula Short variable declarations.

 136
Author: zzzz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-07-26 21:25:21

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.

 144
Author: Chaos,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-08-20 16:30:54

Como ya han explicado otros, := es tanto para declaración como para asignación, e intenta adivinar ( inferir) el tipo de la variable automáticamente.

Es una forma de mano corta de:

var foo int
foo = 32

// OR:
var foo int = 32

// OR:
var foo = 32

Algunas reglas

No puedes usar := fuera de funcs.

illegal := 42

func foo() {
  legal := 42
}

No puedes usarlos dos veces:{[23]]}

legal := 42
legal := 42 // <-- error

Porque, := introduce "una nueva variable", por lo tanto usarlo dos veces no redeclare una segunda variable, por lo que es ilegal.


Sin embargo, puede usarlas dos veces en las declaraciones "multivariable", 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 redeclarando variables, solo estás reasignando nuevos valores a las variables existentes, con algunas variables nuevas.


Puede usarlos si una variable ya declarada 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 := 42 es legal, porque, vuelve a declarar foo en some() el visor de func. foo = 314 es legal, porque, solo reasigna un nuevo valor a foo.

_


Puede usarlos para declaraciones y asignaciones multivariables:

foo, bar   := 42, 314
jazz, bazz := 22, 7

_


Puede reutilizarlos en contextos de sentencias con ámbito como: si, para, cambiar :

foo := 42
if foo := someFunc(); foo == 314 {
  // foo is scoped to 314 here
  // ...
}
// foo is still 42 here

Porque, if foo := ... asignación, solo accesible a esa cláusula if.


Por lo tanto, como regla general: A menos que volver a declarar una variable puede usar :=, o, si desea sobrescribir un valor existente, puede usar =.

 26
Author: Inanc Gumus,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-08-13 19:22:53

:= es una abreviatura de declaración.

a := 10
b := "gopher"

a se declarará como un int e inicializado con valor 10 donde as b se declarará como una cadena e inicializado con valor gopher.

Sus equivalentes usando = serían

var a = 10
var b = "gopher"

= 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).

 18
Author: ShuklaSannidhya,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-07-27 06:19:31

:= declara y asigna, = solo asigna

Es útil cuando no desea llenar su código con declaraciones de tipo o estructura.

// Usage with =
var i int
var U, V, W float64
var k = 0
var x, y float32 = -1, -2

// Usage with :=
i, j := 0, 10
f := func() int { return 7 }
ch := make(chan int)
 9
Author: Gustav,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-07-26 21:28:36

El := significa declarar y asignar mientras que el = significa simplemente asignar.

 8
Author: Ralph Caraveo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-07-26 21:25:49

Del documento de referencia: ( tour.golang.org )

Dentro de una función , la instrucció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.

 6
Author: subhash kumar singh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-08-23 08:05:18

":=" use para hacer declaración e 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

 2
Author: Nisal Edu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-03-16 04:22:45

Ambos son la técnica diferente de declaración de variables en el lenguaje Go.

var firstName := "John" // is a variable declaration 

Y

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

Una declaración de variable corta es una abreviatura para una declaración de variable regular con expresiones inicializadoras pero sin tipos.

Lea a continuación para más detalles:

Declaraciones variables

Declaraciones cortas de variables

 1
Author: Pravin Mishra,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-08-13 01:12:41