Maison > développement back-end > Golang > le corps du texte

Comment résoudre les erreurs de type lors de l'utilisation de types contraints comme arguments dans les fonctions Go ?

Patricia Arquette
Libérer: 2024-10-27 02:43:03
original
246 Les gens l'ont consulté

How to Resolve Type Errors When Using Constrained Types as Arguments in Go Functions?

Utilisation de types contraints comme arguments dans les fonctions

Dans Go 1.18, les génériques fournissent un moyen de définir des types avec des paramètres de type, contraints à un type spécifique ensembles. Cependant, vous pouvez rencontrer une erreur lors de l'utilisation de types contraints comme arguments pour des fonctions attendant des types concrets. Explorons une solution utilisant des conversions de type.

Considérez l'exemple fourni :

<code class="go">type Pokemon interface {
    ReceiveDamage(float64)
    InflictDamage(Pokemon)
}

type Float interface {
    float32 | float64
}

type Charmander[F Float] struct {
    Health      F
    AttackPower F
}

func (c *Charmander[float64]) ReceiveDamage(damage float64) {
    c.Health -= damage
}

func (c *Charmander[float64]) InflictDamage(other Pokemon) {
    other.ReceiveDamage(c.AttackPower)
}</code>
Copier après la connexion

Lorsque vous essayez de compiler ce programme, vous rencontrerez une erreur car c.AttackPower est de type F contraint à float64, mais other.ReceiveDamage() attend un argument float64.

Pour résoudre ce problème, vous devez convertir explicitement c.AttackPower en un type concret qui satisfait Float. Dans ce cas, float32 et float64 satisfont à la contrainte, vous pouvez donc convertir vers l'un ou l'autre.

Les méthodes mises à jour deviennent :

<code class="go">func (c *Charmander[T]) ReceiveDamage(damage float64) {
    c.Health -= T(damage)
}

func (c *Charmander[T]) InflictDamage(other Pokemon) {
    other.ReceiveDamage(float64(c.AttackPower))
}</code>
Copier après la connexion

Avec ces conversions, le programme sera compilé avec succès. Notez que lors de l'instanciation du type Charmander, vous devez spécifier le type concret auquel F doit être lié, tel que *Charmander[float64].

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