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
Libérer: 2024-12-21 01:53:09
original
602 Les gens l'ont consulté

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

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

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!

source:php.cn
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