Maison > développement back-end > Golang > Comment créer un type générique pour un pointeur implémentant une interface dans Go ?

Comment créer un type générique pour un pointeur implémentant une interface dans Go ?

Linda Hamilton
Libérer: 2024-12-29 20:40:18
original
395 Les gens l'ont consulté

How to Create a Generic Type for a Pointer Implementing an Interface in Go?

Type générique pour un pointeur implémentant une interface

Lorsque vous travaillez avec des interfaces dans Go, il peut être nécessaire de passer un pointeur vers un struct qui implémente l’interface. Cela peut être difficile lors de la définition de fonctions génériques.

Question :

Comment puis-je créer un type générique pour un pointeur qui implémente une interface ?

Réponse :

Option 1 : Modifier l'interface Définition

  1. Déclarez l'interface avec un paramètre de type pour spécifier que son type d'implémentation doit être un pointeur vers son paramètre de type :
type A[P any] interface {
    SomeMethod()
    *P
}
Copier après la connexion
  1. Modifier la signature du gestionnaire :
func Handler[P any, T A[P]](callback func(result T)) {
    result := new(P)
    callback(result)
}
Copier après la connexion

Option 2 : Envelopper l'interface (si La modification de la définition n'est pas possible)

  1. Créez une interface wrapper qui intègre l'interface d'origine et ajoute un pointeur vers son paramètre de type :
type MyA[P any] interface {
    A
    *P
}
Copier après la connexion
  1. Modifiez la signature du gestionnaire pour accepter le enveloppé interface :
func Handler[P any, T MyA[P]](callback func(result T)) {
    result := new(P)
    callback(result)
}
Copier après la connexion

Utilisation :

Les deux options permettent de passer un pointeur vers une structure qui implémente l'interface A vers la fonction générique Handler. Par exemple :

type Aimpl struct {}

func (a *Aimpl) SomeMethod() {}

func main() {
    Handler(func(a *Aimpl) { fmt.Printf("%#v\n", a) })
}
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