Maison >développement back-end >Golang >Pourquoi ne puis-je pas utiliser les contraintes de type d'interface pour initialiser une tranche dans Go ?

Pourquoi ne puis-je pas utiliser les contraintes de type d'interface pour initialiser une tranche dans Go ?

DDD
DDDoriginal
2024-11-06 20:14:02423parcourir

Why Can't I Use Interface Type Constraints to Initialize a Slice in Go?

Contraintes de type d'interface : comprendre l'erreur « Contraintes de type »

Dans Go, les interfaces peuvent servir de contraintes de type pour restreindre les types qui peuvent satisfaire eux. Cependant, certaines interfaces, y compris celles contenant des contraintes de type, sont confrontées à des limitations d'utilisation.

Comprendre les contraintes de type

Les contraintes de type font référence aux interfaces qui contiennent des éléments de type, tels que les unions. ou des types intégrés comparables. Ces interfaces sont considérées comme non basiques et ne peuvent pas être utilisées comme types réels pour des valeurs ou des variables ou dans le cadre de types non-interfaces.

Exemple :

Considérez ce qui suit interface avec une contrainte de type :

type Number interface {
    int | int64 | float64
}

Restriction sur l'initialisation de tranche

Une interface avec des contraintes de type, telles que Number, ne peut pas être utilisée pour initialiser directement une tranche. Par exemple, la ligne suivante générerait une erreur :

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

Raison de l'erreur

L'erreur "l'interface contient des contraintes de type : impossible d'utiliser l'interface dans la conversion" découle de la nature non basique de l’interface Number. Les interfaces avec des contraintes de type ne peuvent être utilisées que dans deux scénarios spécifiques :

  1. En tant que contraintes de paramètres de type pour les types et fonctions génériques.
  2. En tant qu'éléments d'autres interfaces qui sont également utilisés comme contraintes.

Exemple d'utilisation autorisée

Au lieu d'initialiser directement une tranche de Number, nous pouvons utiliser la contrainte de paramètre de type suivante :

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

Conclusion

Les interfaces avec des contraintes de type servent un objectif spécifique dans Go. Comprendre leurs limites et leur utilisation appropriée est crucial pour éviter les erreurs et garantir le bon comportement du programme.

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