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 ?
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!