Affectation de valeurs compatibles avec les types dans les structures génériques
Dans Go, les types génériques permettent la création de structures avec des champs de types variables. Cependant, l'attribution de valeurs littérales aux champs peut parfois entraîner des erreurs « IncompatibleAssign ».
Considérez ce code :
type constraint interface { ~float32 | ~float64 } type foo[T constraint] struct { val T } func (f *foo[float64]) setValToPi() { f.val = 3.14 }
Ce code est compilé car son interface de contrainte n'inclut que des types à virgule flottante. Cependant, si l'on ajoute des types entiers à la contrainte :
type constraint interface { ~float32 | ~float64 | ~int } type foo[T constraint] struct { val T } func (f *foo[float64]) setValToPi() { f.val = 3.14 }
Nous rencontrons une erreur "IncompatibleAssign" car une constante float non typée ne peut pas être directement affectée à un champ de type entier.
Raison de l'erreur
L'erreur se produit car la contrainte autorise plusieurs types avec un type différent groupes. Lors de l'attribution d'une valeur littérale à un champ de type générique, le compilateur ne peut pas déterminer le type exact du champ au moment de la compilation. L'attribution d'une constante float non typée pourrait conduire à attribuer un type incompatible à un champ de type entier, entraînant l'erreur.
Solution
Pour résoudre cette erreur, nous ont plusieurs options :
Conclusion
En comprenant les raisons derrière l'erreur "IncompatibleAssign", nous pouvons adopter des solutions appropriées pour garantir la compatibilité des types dans les champs de structure génériques.
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!