conversion - golang float64
Go no puede inferir el tipo en la asignaciĆ³n: "sin nombre en el lado izquierdo de:=" (3)
Este fragmento funciona como se esperaba play.golang.org/p/VuCl-OKMav
i := 10
next := 11
prev, i := i, next
Sin embargo, este fragmento casi idéntico da non-name f.Bar on left side of :=
play.golang.org/p/J8NNWPugQG
type Foo struct {
Bar int
}
f := Foo{10}
next := 11
prev, f.Bar := f.Bar, next
¿Qué tiene de especial la estructura que detiene la inferencia tipo? ¿Es esto un error?
No es realmente un problema de inferencia de tipo, es solo que el lado izquierdo de :=
debe ser una lista de identificadores, y f.Bar
no es un identificador, por lo que no se puede declarar, ni siquiera con :=
'' s reglas ligeramente más permisivas para lo que puede declarar. Consulte "Declaraciones de variables cortas" en The Go Programming Language Specification .
Es un problema abierto.
Issue 6842 : spec: Asignación a campos con notación de declaración corta
Desde la sección "Declaraciones de variables cortas" de la especificación:
"A diferencia de las declaraciones de variables regulares, una declaración de variable corta puede volver a declarar variables siempre que se declararon originalmente en el mismo bloque ... con el mismo tipo, y al menos una de las variables no en blanco es nueva".
Entonces, si declara la variable dentro de otro tipo (struct Foo en el ejemplo), se descalifica por "siempre que se declararan originalmente en el mismo bloque".
Entonces la respuesta es simplemente establecer la variable preestablecida igual - no usando la sintaxis: = al valor:
...
var prev int
prev, f.Bar = f.Bar, next
...