Maison > développement back-end > Golang > Pourquoi l'inférence de type de Go échoue-t-elle avec les affectations de champs Struct ?

Pourquoi l'inférence de type de Go échoue-t-elle avec les affectations de champs Struct ?

Susan Sarandon
Libérer: 2024-12-21 01:16:13
original
990 Les gens l'ont consulté

Why Does Go's Type Inference Fail with Struct Field Assignments?

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
Copier après la connexion

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
Copier après la connexion

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!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal