Échec de l'inférence de type dans les affectations Go
Le mécanisme d'inférence de type de Go permet généralement des instructions d'affectation concises. Cependant, certaines affectations peuvent ne pas parvenir à déduire les types comme prévu.
Considérons l'exemple suivant :
i := 10 next := 11 prev, i := i, next
Cet extrait déduit correctement les types des variables et les affecte en conséquence.
Cependant, une affectation similaire impliquant un champ struct peut rencontrer des problèmes d'inférence de type :
type Foo struct { Bar int } f := Foo{10} next := 11 prev, f.Bar := f.Bar, next
Dans ce cas, le compilateur signale une erreur : "non-name on left side of :=."
La raison de cette disparité est que dans le premier exemple, le côté gauche de l'affectation est un nom de variable, tandis que dans le deuxième exemple, il s'agit d'un champ struct. Le moteur d'inférence de type de Go nécessite une variable nommée sur le côté gauche pour déduire le type du côté droit.
Ce problème est reconnu comme Go issue 6842. Il n'est pas considéré comme un bug mais plutôt comme une limitation de l'implémentation actuelle de l'inférence de type.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!