Maison > développement back-end > Golang > Comment les génériques de Go peuvent-ils gérer des fonctions avec des paramètres d'interface basés sur un pointeur ?

Comment les génériques de Go peuvent-ils gérer des fonctions avec des paramètres d'interface basés sur un pointeur ?

Barbara Streisand
Libérer: 2024-12-29 00:36:09
original
191 Les gens l'ont consulté

How Can Generics in Go Handle Functions with Pointer-Based Interface Parameters?

Interface générique des pointeurs

Dans Go, la définition d'une interface pour l'implémentation d'un pointeur peut se faire via des génériques. Considérons le scénario suivant :

Problème :

  • Vous avez une interface A avec une méthode SomeMethod().
  • Vous avez une struct pointeur *Aimpl qui implémente l'interface A.
  • Vous souhaitez créer un gestionnaire de fonction générique qui accepte une fonction avec un A paramètre et attribue un pointeur vers Aimpl à son paramètre.

Solution utilisant une interface générique avec un paramètre de type :

Pour y parvenir, vous pouvez déclarer le A interface avec un paramètre de type, en garantissant que le type d'implémentation est un pointeur vers son paramètre de type :

type A[P any] interface {
    SomeMethod()
    *P
}
Copier après la connexion

Ensuite, modifiez la signature de Handler comme suit :

func Handler[P any, T A[P]](callback func(result T)) {
    result := new(P)
    callback(result)
}
Copier après la connexion

Solution utilisant l'interface Wrapper :

Si vous ne pouvez pas modifier la définition de A, vous pouvez l'envelopper dans votre propre interface MyA :

type MyA[P any] interface {
    A
    *P
}
Copier après la connexion

Ensuite, mettez à jour la signature de Handler pour utiliser l'interface MyA :

func Handler[P any, T MyA[P]](callback func(result T)) {
    result := new(P)
    callback(result)
}
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!

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