¿Que esta pasando 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) ;
}
Lanza un error que dice
no new variables on left side of :=
Lo que estaba haciendo era reasignar valores a una variable ya declarada.
variables
go
colon-equals
Runas
fuente
fuente
myArray,x = [...]int{11,12,14},3
Respuestas:
Elimine
colon :
de la segunda instrucción ya que está asignando un nuevo valor a la variable existente.colon :
se usa cuando realiza la declaración corta y la asignación por primera vez como lo está haciendo en su primera declaración, es decirmyArray :=[...]int{12,14,26}
.fuente
Hay dos tipos de operadores de asignación en go
:=
y=
. Son semánticamente equivalentes (con respecto a la asignación) pero la primera es también una "declaración de variable corta" ( http://golang.org/ref/spec#Short_variable_declarations ) lo que significa que en la izquierda necesitamos tener al menos una nueva declaración de variable para que sea correcta.Puede cambiar el segundo a una declaración de asignación simple
:=
->=
o puede usar una nueva variable si está bien con su algoritmo.fuente
:=
no se puede usar con_
? p_ := someFunc()
Como nota al margen, redeclaración solo puede aparecer en una declaración corta multivariable
Citando de la especificación de idioma:
Aquí hay un muy buen ejemplo sobre la redeclaración de variables en golang: https://stackoverflow.com/a/27919847/4418897
fuente
Como lo indicaron los comentaristas anteriores,
:=
es un tipo de declaración de variable abreviada y / o abreviada .Entonces, en la declaración anterior, estás haciendo dos cosas.
La segunda parte de su código falla, porque lo que está haciendo aquí:
Está declarando de nuevo la variable myArray existente , que ya contiene valores enteros.
Esto funciona:
Porque está asignando la matriz de enteros a la variable existente (pre-declarada / inicializada).
fuente