Maison >développement back-end >Golang >Comment éviter les erreurs « IncompatibleAssign » lors de l'attribution de valeurs aux champs de structure génériques dans Go ?

Comment éviter les erreurs « IncompatibleAssign » lors de l'attribution de valeurs aux champs de structure génériques dans Go ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-21 01:53:09708parcourir

How to Avoid

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 :

  1. Évitez d'utiliser des littéraux non typés : Au lieu de en utilisant des littéraux non typés, déclarez une valeur du type spécifique et attribuez-la au champ.
  2. Utilisez une méthode qui accepte le paramètre de type : Créez une méthode qui prend une valeur du paramètre de type tapez comme argument et l'attribue au champ.
  3. Utilisez un type de champ "any" ou "interface{}" : Ces types peuvent contenir valeurs de tout type, offrant de la flexibilité mais sacrifiant la sécurité des types.

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!

Déclaration:
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