"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Pourquoi ne puis-je pas utiliser des interfaces avec des contraintes de type directement dans Go ?

Pourquoi ne puis-je pas utiliser des interfaces avec des contraintes de type directement dans Go ?

Publié le 2024-11-19
Parcourir:263

Why Can't I Use Interfaces with Type Constraints Directly in Go?

Contraintes de type d'interface

Lors du développement d'une application Go, il est essentiel de comprendre les limitations imposées par les contraintes de type d'interface. Les types d'interface avec des éléments de type, tels que les unions, sont limités dans leur utilisation. Cet article approfondit les spécificités des contraintes de type d'interface et fournit des exemples pour illustrer leur impact.

Définition d'interfaces avec des contraintes de type

Dans Go, les interfaces qui contiennent des éléments de type, tels que les unions, sont prises en compte. non basique. Cela signifie qu'ils ne peuvent pas être utilisés comme types de variables ou être des composants d'autres types non-interfaces. Par exemple, l'interface Number suivante n'est pas basique car elle contient une union :

type Number interface {
    int | int64 | float64
}

L'erreur : "l'interface contient des contraintes de type"

Lors de la tentative d'initialisation d'une tranche de l'interface Number comme ceci :

a := []Number{Number(1), Number(2), Number(3), Number(4)}

Go génère l'erreur "l'interface contient des contraintes de type" car l'interface Number ne peut pas être utilisée dans la conversion de type (comme on le voit dans Number(1)).

Comprendre les contraintes de type

Selon la spécification du langage Go, les interfaces qui ne sont pas basiques ne peuvent être utilisées que comme contraintes de type ou comme éléments d'autres interfaces utilisées comme contraintes. Il ne peut pas s'agir de types de valeurs ou de variables. En effet, la présence d'éléments de type dans une interface la rend non basique et incompatible avec l'instanciation directe.

Exemple : Utilisation d'interfaces non basiques

Alors que les interfaces non basiques ne peuvent pas être utilisées directement en tant que types, elles peuvent être utilisées comme contraintes de type. Par exemple, considérons la structure Coordonnées suivante qui utilise un paramètre de type générique T contraint par l'interface Nombre :

type Coordinates[T Number] struct {
    x, y T
}

Dans ce scénario, la structure Coordonnées ne peut être instanciée qu'avec des types qui répondent aux contraintes de l'interface Number.

Conclusion

Les types d'interface avec des contraintes de type jouent un rôle crucial dans assurer la sécurité des types dans les applications Go. En comprenant les limites des interfaces non basiques et en les utilisant correctement dans le cadre des contraintes de type, les développeurs peuvent créer un code robuste et efficace.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3