Comprendre le jeton Tilde (~) dans Go Generics
Dans les génériques Go, le jeton tilde (~) joue un rôle crucial dans la définition le type sous-jacent d’un type donné. Il fonctionne sous la forme ~T, indiquant l'ensemble des types qui partagent T comme type sous-jacent.
Ce concept est particulièrement utile dans les cas où vous souhaitez spécifier une contrainte qui autorise les types dérivés d'un type sous-jacent spécifique. Par exemple, considérons la contrainte d'interface suivante :
type Ordered interface { Integer | Float | ~string }
Dans cet exemple, la contrainte définit une interface qui peut accepter tout type qui est soit un entier, soit un flottant, soit un type dont le type sous-jacent est une chaîne. . Cela signifie que des types comme MyString, qui définit un type de chaîne personnalisé, peuvent également satisfaire cette contrainte tant que leur type sous-jacent reste une chaîne.
Types sous-jacents dans Go
Le terme « type sous-jacent » fait référence au type fondamental qui sous-tend un type donné. Dans Go, cela est déterminé en fonction de la déclaration de type. Pour les types de base comme int, string et bool, leur type sous-jacent est le type lui-même. Cependant, pour les types composites tels que les structures, les tranches et les interfaces, le type sous-jacent est le type référencé dans la déclaration de type.
Exemple d'utilisation du jeton Tilde
Le code suivant démontre l'utilisation du jeton tilde :
type Foo struct { n int } type ByteSlice []byte type MyInt8 int8 type MyString string func echoExact[T ExactSigned](t T) T { // Only allows exact types, excluding MyInt8 } func echo[T constraints.Signed](t T) T { // Allows types with underlying type int8, including MyInt8 }
Dans cet exemple, ExactSigned utilise uniquement des types exacts, ce qui exclut MyInt8. D'un autre côté, contraintes.Signed autorise MyInt8 car il contient des éléments d'approximation comme ~int8.
Remarque : Limitations du jeton Tilde
Il est important de noter que le Le jeton tilde ne peut pas être utilisé avec des paramètres de type. Par exemple, le code suivant n'est pas valide :
type AnyApprox[T any] interface { ~T }
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!