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
Susan Sarandonoriginal
2024-12-13 02:16:10681parcourir

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
}

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!

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