Maison > développement back-end > Golang > Comment puis-je créer des objets d'un type spécifique dans une fonction générique dans Go 1.18 ?

Comment puis-je créer des objets d'un type spécifique dans une fonction générique dans Go 1.18 ?

Barbara Streisand
Libérer: 2024-12-15 17:10:11
original
231 Les gens l'ont consulté

How Can I Create Objects of a Specific Type within a Generic Function in Go 1.18?

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

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

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

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

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!

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