Comprendre le jeton Tilde (~) dans Go Generics
L'introduction par Go du jeton tilde (~) a apporté une nouvelle dimension au générique programmation. Ce jeton permet aux développeurs de définir des types qui partagent un type sous-jacent commun.
Qu'est-ce que le jeton Tilde ?
Dans Go, le jeton tilde (~) signifie l'ensemble de tous les types avec un type sous-jacent T. Par exemple, ~T indique tous les types dont le type sous-jacent est T.
Pourquoi est-ce Utile ?
Le jeton tilde offre un moyen flexible de définir des interfaces génériques pouvant accepter des types avec un type sous-jacent spécifique. Par exemple, une interface Ordonnée pourrait être définie comme :
type Ordered interface { Integer | Float | ~string }
Cette interface spécifie qu'un type doit être soit un Integer, un Float ou un type dont le type sous-jacent est une chaîne. Cela permet aux types personnalisés avec un type de chaîne sous-jacent, tel que MyString, de satisfaire cette interface.
Types sous-jacents
Le concept de types sous-jacents est crucial pour comprendre le tilde jeton. Le type sous-jacent d'un type T est généralement T lui-même, sauf :
Exemples pratiques
À l'aide du jeton tilde, des contraintes peuvent être créées pour limiter les types pouvant satisfaire une interface spécifique. Par exemple, une contrainte appelée ExactSigned pourrait être définie pour autoriser uniquement les types exactement int, int8, int16, int32 ou int64. Une telle contrainte n'autoriserait pas les types personnalisés comme MyInt8.
D'un autre côté, une contrainte appelée contraintes.Signed utilise l'élément d'approximation ~ pour autoriser les types dont le type sous-jacent est int8. Cela permet aux types personnalisés comme MyInt8 de satisfaire la contrainte.
Sucre syntaxique
Le jeton tilde peut être utilisé dans les unions, les contraintes anonymes et même avec le sucre syntaxique. Vous pouvez notamment utiliser des éléments d'approximation avec un seul type pour simplifier l'écriture des contraintes.
Par exemple, les contraintes anonymes suivantes sont équivalentes :
func echoFixedSize[T interface { ~int8 | ~int32 | ~int64 }](t T) { /* ... */ } func echoFixedSizeSugar[T ~int8 | ~int32 | ~int64](t T) { /* ... */ } func echoFixedSizeSugarOne[T ~int8](t T) { /* ... */ }
Cas d'utilisation courants
Les éléments d'approximation sont particulièrement utiles pour travailler avec des types composites qui doivent avoir des méthodes. Par exemple, pour permettre à une méthode d'être déclarée pour un type ByteSeq, son type sous-jacent doit être lié à l'identifiant :
type ByteSeq []byte func (b ByteSeq) DoSomething() {}
En spécifiant ~[]byte dans une contrainte, il devient possible d'instancier ByteSeq comme type valide.
Limitations
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!