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
type A[P any] interface { SomeMethod() *P }
func Handler[P any, T A[P]](callback func(result T)) { result := new(P) callback(result) }
Option 2 : Envelopper l'interface (si La modification de la définition n'est pas possible)
type MyA[P any] interface { A *P }
func Handler[P any, T MyA[P]](callback func(result T)) { result := new(P) callback(result) }
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) }) }
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!