Go échoue à inférer le type dans l'affectation: "non-nom sur le côté gauche de: ="
Cet extrait fonctionne comme prévu play.golang.org/p/VuCl-OKMav
i := 10
next := 11
prev, i := i, next
Cependant, cette presque identique extrait donne 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
Ce qui est spécial au sujet de la structure qui s'arrête à l'inférence de type? Est-ce un bug?
source d'informationauteur deft_code
Vous devez vous connecter pour publier un commentaire.
Ce n'est pas vraiment un problème de l'inférence de type, c'est juste que la partie gauche de
:=
doit être une liste d'identifiants, etf.Bar
n'est pas un identificateur, donc il ne peut pas être déclaré, même pas avec:=
's un peu plus permissif règles pour ce qu'il peut déclarer. Voir "De courtes déclarations de variables" L'Aller Langage de Programmation Spécification.C'est une question ouverte.
Question 6842: spec: Attribution de champs avec une courte déclaration de notation
À partir de la spécification du "Court déclarations de variables" section:
"Contrairement à des déclarations de variables, une courte déclaration de variable peut redeclare variables fournies qu'ils étaient à l'origine déclarée plus tôt dans le même bloc...avec le même type, et au moins l'un des non-vide de variables est nouveau."
Donc, si vous déclarez la variable à l'intérieur d'un autre type (struct Foo dans l'exemple), il est disqualifié par "à condition qu'elles étaient à l'origine déclarée plus tôt dans le même bloc".
Donc la réponse est juste de régler la pré-déclaration de variable est égale--pas de l'aide de l' := la syntaxe--à la valeur: