Création d'objets à l'aide de génériques typés dans Go 1.18
Dans Go 1.18, les génériques permettent la création de fonctions qui fonctionnent avec n'importe quel type de données. Cependant, la création d'un nouvel objet d'un type spécifique au sein d'une fonction générique nécessite une syntaxe spécifique.
Implémentation de la fonction Create
Par exemple, considérons une fonction "Create" qui devrait créer une nouvelle instance de la structure "Apple". Pour y parvenir en génériques :
type FruitFactory[T any] struct{} func (f FruitFactory[T]) Create() *T { // How to create non-nil fruit here? return nil // Placeholder, don't return nil } type Apple struct { color string }
Approche 1 : Utilisation d'une variable de type
Si "Apple" n'est pas un type pointeur, une variable typée peut être déclarée et son adresse renvoyée :
func (f FruitFactory[T]) Create() *T { var a T // Declare variable of type T return &a // Return address of variable }
Approche 2 : Utiliser le "nouveau" Fonction
Alternativement, la fonction « nouvelle » peut être utilisée pour créer un nouvel objet :
func (f FruitFactory[T]) Create() *T { return new(T) }
Gestion des types de pointeurs
Dans le cas où « FruitFactory » est instancié avec un type pointeur, une approche plus complexe est nécessaire :
// Constraining type to its pointer type type Ptr[T any] interface { *T } // Type parameters: FruitFactory (pointer type), FruitFactory (non-pointer type) type FruitFactory[T Ptr[U], U any] struct{} func (f FruitFactory[T,U]) Create() T { var a U // Declare non-pointer type variable return T(&a) // Convert to pointer type } type Apple struct { color string }
En suivant ces approches, il est possible de créer de nouveaux objets de tout type en utilisant des génériques dans Go 1.18.
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!