Maison >développement back-end >Golang >Comment puis-je créer des wrappers de fonctions dans Go to Inject Code avant et après l'exécution de la fonction ?

Comment puis-je créer des wrappers de fonctions dans Go to Inject Code avant et après l'exécution de la fonction ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-21 18:27:14790parcourir

How Can I Create Function Wrappers in Go to Inject Code Before and After Function Execution?

Function Wrapper dans Go

Dans Go, il est possible de créer un wrapper de fonction qui prend une fonction en entrée et en renvoie une version enveloppée. Cela permet d'injecter du code avant et après l'exécution de la fonction encapsulée.

Pour définir un wrapper de fonction, vous devez spécifier la signature de la fonction que vous souhaitez envelopper. Voici un exemple :

func funcWrapper(myFunc interface{}) {
    fmt.Println("Before")
    //call myFunc
    fmt.Println("After")
}

Dans cet exemple, le wrapper de fonction prend une variable de type interface{} en entrée, ce qui lui permet d'accepter des fonctions de signatures différentes. Lorsque la fonction encapsulée est appelée, le code avant et après l'appel de fonction est exécuté.

Cependant, cette approche nécessite que vous spécifiiez la signature de la fonction que vous souhaitez envelopper. Une solution plus flexible consiste à utiliser une fonction littérale qui peut accepter des fonctions de n'importe quelle signature :

func wrap(f func(i int) int) func(i int) int {
    return func(i int) (ret int) {
        fmt.Println("Before, i =", i)
        ret = f(i)
        fmt.Println("After, ret =", ret)
        return
    }
}

Cette fonction wrapper prend une fonction qui prend un int en entrée et renvoie un int. Il renvoie ensuite une nouvelle fonction qui exécute le code avant et après l'appel de la fonction encapsulée.

Pour utiliser le wrapper, vous transmettez la fonction que vous souhaitez envelopper en argument :

wf := wrap(myfunc)
ret := wf(2)
fmt.Println("Returned:", ret)

Cet exemple encapsule la fonction myfunc et imprime les valeurs d'entrée et de retour de la fonction encapsulée.

Dans Go, vous pouvez créer des fonctions wrapper distinctes pour différents types de fonctions afin de garantir la sécurité des types. et facilité d'utilisation.

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:
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