Dans Go, comprendre le nouveau jeton Tilde ~
Go a introduit un nouveau jeton, le tilde ~, qui revêt une importance dans le contexte de génériques. Il symbolise l'ensemble de tous les types avec un type sous-jacent T.
Dans l'exemple fourni :
type Ordered interface { Integer | Float | ~string }
La ~string désigne un ensemble de types dont le type sous-jacent est une chaîne. Cela pourrait inclure des types définis par l'utilisateur comme MyString qui encapsule le type de chaîne, offrant des fonctionnalités supplémentaires.
Types sous-jacents
Le jeton tilde repose sur le concept de types sous-jacents. La spécification du langage Go définit explicitement le type sous-jacent de chaque type. Ce concept devient crucial pour comprendre l'utilité de ~.
Considérez ce qui suit :
type Foo struct { n int } type MyInt8 int8
Ici, Foo définit une structure avec un type sous-jacent de struct { n int }, tandis que MyInt8 est un alias pour int8, lui donnant un type sous-jacent de int8.
Pratique Applications
L'implication pratique du jeton ~ émerge dans les contraintes d'interface. Une contrainte d'interface avec uniquement des éléments exacts (sans aucun élément d'approximation) n'autoriserait pas les types définis par l'utilisateur comme MyInt8.
Par exemple, si nous définissons une interface :
type ExactSigned interface { int | int8 | int16 | int32 | int64 }
Et une fonction :
func echoExact[T ExactSigned](t T) T { return t }
Nous ne pouvons pas instancier echoExact avec MyInt8. Cependant, en utilisant des éléments de contrainte, nous pouvons modifier la contrainte pour autoriser des éléments d'approximation, tels que ~int8.
Fonctionnalités supplémentaires
En plus d'utiliser des éléments d'approximation dans les unions, Go les autorise également dans des contraintes anonymes avec ou sans sucre syntaxique. Par exemple, la contrainte suivante est valide :
type Signed interface { ~int8 | ~int32 | ~int64 }
Un cas d'utilisation courant des éléments d'approximation concerne les types composites tels que les tranches et les structures qui nécessitent des méthodes. Dans de tels cas, la liaison de l'identifiant est nécessaire pour déclarer les méthodes, et l'élément d'approximation permet l'instanciation avec des types personnalisés.
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!