O que está acontecendo aqui?
package main
import "fmt"
func main() {
myArray :=[...]int{12,14,26} ;
fmt.Println(myArray)
myArray :=[...]int{11,12,14} //error pointing on this line
fmt.Println(myArray) ;
}
Ele lança um erro que diz
no new variables on left side of :=
O que eu estava fazendo era reatribuir valores a uma variável já declarada.
variables
go
colon-equals
Runas
fonte
fonte
myArray,x = [...]int{11,12,14},3
Respostas:
Remova o
colon :
da segunda instrução ao atribuir um novo valor à variável existente.colon :
é usado quando você executa a declaração curta e atribuição pela primeira vez como você está fazendo em sua primeira declaração, isto émyArray :=[...]int{12,14,26}
.fonte
Existem dois tipos de operadores de atribuição em go
:=
e=
. Eles são semanticamente equivalentes (com relação à atribuição), mas o primeiro também é uma "declaração de variável curta" ( http://golang.org/ref/spec#Short_variable_declarations ) o que significa que à esquerda precisamos ter pelo menos um nova declaração de variável para que seja correta.Você pode alterar a segunda para uma instrução de atribuição simples
:=
->=
ou pode usar uma nova variável se estiver de acordo com o seu algoritmo.fonte
:=
não pode ser usado com_
? por exemplo_ := someFunc()
Como uma observação lateral, a redeclaração só pode aparecer em uma declaração curta multivariável
Citando a partir da especificação do idioma:
Aqui está um bom exemplo sobre redeclaração de variáveis em golang: https://stackoverflow.com/a/27919847/4418897
fonte
Conforme afirmado pelos comentadores anteriores,
:=
é um tipo de declaração abreviada e / ou forma abreviada de variável .Portanto, na declaração acima, você está fazendo duas coisas.
A segunda parte do seu código falha, porque o que você está fazendo aqui:
Está declarando RE-declarando a variável existente myArray, que já contém valores inteiros.
Isso funciona:
Porque, ele está atribuindo a matriz inteira à variável existente (pré-declarada / inicializada).
fonte