Se você deseja usar um tipo específico, x := uint32(123)funciona por exemplo. Deve ser óbvio para a maioria das pessoas, mas eu tinha que pensar alguns minutos ;-)
então significa variável com tipo inferido? certo?
Krupal Shah
@KrupalShah o link para a documentação diz literalmente que - "É uma abreviação de uma declaração de variável regular com expressões inicializadoras, mas sem tipos:" golang.org/ref/spec#Short_variable_declarations
Existe um caso de uso para, =por oposição a :=? Você deve sempre usar sempre :=?
precisa
3
O @KennethWorden Go não permitirá que você use :=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.
Kenny Bania
5
o intnão é necessário, var foo = 10é o mesmo quefoo := 10
Gary Lyn
@KennyWorden, sim. Você não pode usar: = fora de uma função.
Karuhanga
105
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 foono 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 :=42if foo := someFunc(); foo ==314{// foo is scoped to 314 here// ...}// foo is still 42 here
Porque, fooem if foo := ..., pertence apenas a essa ifclá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 =.
«= É operador de atribuição. É usado da mesma maneira que em qualquer outro idioma. Exceto em Ada, onde =é apenas para comparação e :=é para atribuição ...
Alexis Wilke
13
O: = significa declarar e atribuir enquanto o = significa simplesmente atribuir.
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.
fonte
:=
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 quefoo := 10
.fonte
=
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:/ * Existem algumas regras: * /
★ 1ª regra:
Você não pode usar
:=
fora defuncs
. É porque, de qualquer função, uma instrução deve começar com uma palavra-chave.★ 2ª regra:
Você não pode usá-los duas vezes ( no mesmo escopo ):
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:
★ 4ª regra (redeclaração):
Você pode usá-los duas vezes nas declarações "multi-variable" , se uma das variáveis for nova :
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:
Aqui,
foo := 42
é legal, porque declarafoo
nosome()
escopo de func.foo = 314
é legal porque apenas atribui um novo valor afoo
.★ 6ª regra:
Você pode declarar o mesmo nome em blocos curtos de instruções como: if , for , switch :
Porque,
foo
emif foo := ...
, pertence apenas a essaif
cláusula e está em um escopo diferente.Referências:
Regras de declaração de variável curta
Um Guia Visual para Ir Variáveis
fonte
:=
é uma abreviação para declaração.a
será declarado como umint
e inicializado com valor, em10
que comob
será declarado como uma sequência e inicializado com valorgopher
.Seus equivalentes usando
=
seriam=
é 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 ).
fonte
=
é apenas para comparação e:=
é para atribuição ...O: = significa declarar e atribuir enquanto o = significa simplesmente atribuir.
fonte
:=
declara e atribui,=
apenas atribuiÉ útil quando você não deseja preencher seu código com declarações de tipo ou estrutura.
fonte
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.
fonte
“: =” 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
https://play.golang.org/p/XBdjBh-DQB
fonte
Ambas são as diferentes técnicas de declaração de variáveis na linguagem Go.
E
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:
Declarações variáveis
Declarações curtas de variáveis
fonte