Maison > développement back-end > Golang > Comment le jeton Tilde (~) fonctionne-t-il dans les génériques Go pour définir les types sous-jacents ?

Comment le jeton Tilde (~) fonctionne-t-il dans les génériques Go pour définir les types sous-jacents ?

Susan Sarandon
Libérer: 2024-12-13 02:16:10
original
701 Les gens l'ont consulté

How Does the Tilde (~) Token Work in Go Generics to Define Underlying Types?

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
}
Copier après la connexion

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
}
Copier après la connexion

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
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal