Qual é a diferença entre o =
e :=
operadores, e quais são os casos de uso para eles? Ambos parecem ser para uma tarefa?
x := uint32(123)
funciona por exemplo. Deve ser óbvio para a maioria das pessoas, mas eu tinha que pensar alguns minutos ;-)
Qual é a diferença entre o =
e :=
operadores, e quais são os casos de uso para eles? Ambos parecem ser para uma tarefa?
x := uint32(123)
funciona por exemplo. Deve ser óbvio para a maioria das pessoas, mas eu tinha que pensar alguns minutos ;-)
Respostas:
Somente =
é o operador de atribuição.
:=
faz parte da sintaxe da cláusula Short variable declarações .
Though Existem algumas regras. Veja esta outra resposta para mais detalhes.
:=
está listado como operador aqui golang.org/ref/spec#Operators_and_punctuation , então não tenho certeza se concordo que " :=
na verdade não é um operador"
No Go, :=
é para declaração + atribuição, enquanto que =
é apenas para atribuição.
Por exemplo, var foo int = 10
é o mesmo que foo := 10
.
=
por oposição a :=
? Você deve sempre usar sempre :=
?
:=
para atribuir a uma variável que já foi declarada, a menos que você esteja atribuindo a várias variáveis ao mesmo tempo e pelo menos uma dessas variáveis seja nova.
int
não é necessário, var foo = 10
é o mesmo quefoo := 10
Como outros já explicaram, :=
é para declaração, atribuição e também para redeclaração; e adivinha ( infere ) o tipo da variável automaticamente.
Por exemplo, foo := 32
é uma forma abreviada de:
var foo int
foo = 32
// OR:
var foo int = 32
// OR:
var foo = 32
/ * Existem algumas regras: * /
★ 1ª regra:
Você não pode usar :=
fora de funcs
. É porque, de qualquer função, uma instrução deve começar com uma palavra-chave.
// 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.
}
★ 2ª regra:
Você não pode usá-los duas vezes ( no mesmo escopo ):
legal := 42
legal := 42 // <-- error
Porque, :=
introduz "uma nova variável" , portanto, usá-la duas vezes não redeclarar uma segunda variável, sendo ilegal.
★ 3ª regra:
Você pode usá-los para declarações e atribuições de várias variáveis:
foo, bar := 42, 314
jazz, bazz := 22, 7
★ 4ª regra (redeclaração):
Você pode usá-los duas vezes nas declarações "multi-variable" , se uma das variáveis for nova :
foo, bar := someFunc()
foo, jazz := someFunc() // <-- jazz is new
baz, foo := someFunc() // <-- baz is new
Isso é legal, porque, você não está declarando todas as variáveis, está apenas reatribuindo novos valores às variáveis existentes e declarando novas variáveis ao mesmo tempo. Isso é chamado de redeclaração .
★ 5ª regra:
Você pode usar a declaração curta para declarar uma variável em um escopo mais recente, mesmo que a variável já esteja declarada com o mesmo nome antes:
var foo int = 34
func some() {
// because foo here is scoped to some func
foo := 42 // <-- legal
foo = 314 // <-- legal
}
Aqui, foo := 42
é legal, porque declara foo
no some()
escopo de func. foo = 314
é legal porque apenas atribui um novo valor a foo
.
★ 6ª regra:
Você pode declarar o mesmo nome em blocos curtos de instruções como: if , for , switch :
foo := 42
if foo := someFunc(); foo == 314 {
// foo is scoped to 314 here
// ...
}
// foo is still 42 here
Porque, foo
em if foo := ...
, pertence apenas a essa if
cláusula e está em um escopo diferente.
Portanto, como regra geral: se você deseja declarar facilmente uma variável, pode usar
:=
ou, se deseja substituir apenas uma variável existente, pode usar=
.
Referências:
:=
é uma abreviação para declaração.
a := 10
b := "gopher"
a
será declarado como um int
e inicializado com valor, em 10
que como b
será declarado como uma sequência e inicializado com valor gopher
.
Seus equivalentes usando =
seriam
var a = 10
var b = "gopher"
=
é um operador de atribuição. É usado da mesma maneira que você usaria em qualquer outro idioma.
Você pode omitir o tipo quando declarar a variável e um inicializador estiver presente ( http://tour.golang.org/#11 ).
=
é apenas para comparação e :=
é para atribuição ...
O: = significa declarar e atribuir enquanto o = significa simplesmente atribuir.
:=
declara e atribui, =
apenas atribui
É útil quando você não deseja preencher seu código com declarações de tipo ou estrutura.
// 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)
do documento de referência: ( tour.golang.org )
Dentro de uma função , a :=
instrução de atribuição curta pode ser usada no lugar de uma declaração var com o tipo implícito.
Fora de uma função , cada construção começa com uma palavra-chave (var, func etc.) e a construção: = não está disponível.
“: =” Use para fazer declaração e inicialização ao mesmo tempo, a seguir é um exemplo.
Uso de "="
var i int
i = 10
https://play.golang.org/p/RU88ty_SGa
Uso de ": ="
i: = 10
Ambas são as diferentes técnicas de declaração de variáveis na linguagem Go.
var firstName = "John" // is a variable declaration
E
firstName := "John" // is a short variable declaration.
Uma declaração curta de variável é um atalho para uma declaração regular de variável com expressões inicializadoras, mas sem tipos.
Leia abaixo para obter detalhes: