Maison > Article > développement back-end > Pourquoi ne puis-je pas utiliser des interfaces avec des contraintes de type directement dans Go ?
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.
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 }
Lors de la tentative d'initialisation d'une tranche du Number interface comme celle-ci :
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)).
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.
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 Numéro :
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 Numéro.
Les types d'interface avec des contraintes de type jouent un rôle crucial pour garantir 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.
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!