Inférence de type dans l'affectation avec des structures
L'inférence de type dans Go est une fonctionnalité pratique qui vous permet d'omettre les annotations de type explicites dans certains scénarios. Cependant, lors de l'attribution de valeurs à des champs de types structurés, certaines limitations peuvent survenir.
Considérez les extraits de code suivants :
i := 10 next := 11 prev, i := i, next
Ici, l'affectation à i déduit le type de prev et déclare comme int.
type Foo struct { Bar int } f := Foo{10} next := 11 prev, f.Bar := f.Bar, next
Dans ce code, cependant, l'affectation à f.Bar ne parvient pas à déduire le type de prev. Au lieu de cela, il produit l'erreur : "non-name on left side of :=".
Pourquoi cela se produit-il ? Il s'avère que la présence du type struct (Foo) perturbe le processus d'inférence de type. Dans les affectations simples (comme le premier extrait de code), l'inférence de type s'appuie sur le contexte pour déterminer le type de la variable affectée. Cependant, dans le deuxième extrait de code, la présence de la structure crée une expression avec plusieurs composants, rendant l'inférence de type ambiguë.
Est-ce un bug dans Go ? Il s'avère qu'il s'agit d'un problème connu qui a été abordé dans le numéro 6842 :
Problème 6842 : spec : affectation à des champs avec une notation de déclaration courte
Le problème reste non résolu, indiquant que ce comportement est intentionnel. Pour contourner cette limitation, vous pouvez soit taper explicitement annoter la variable prev, soit utiliser une forme d'affectation plus longue, telle que f.Bar = next.
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!