Maison >développement back-end >Golang >Quelle est l'utilisation du jeton Tilde (~) dans Go Generics ?

Quelle est l'utilisation du jeton Tilde (~) dans Go Generics ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-26 10:59:09273parcourir

What is the Use of the Tilde Token (~) in Go Generics?

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 :

  • Pour les types numériques, booléens ou chaînes prédéclarés, le type sous-jacent est le type lui-même.
  • Pour les types composites (structs, slices, etc.), le type sous-jacent est le type auquel le type composite fait référence dans son type déclaration.

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!

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