Passer des fonctions comme arguments : une approche de métaprogrammation en Golang
Comme nous le savons, les fonctions Golang sont des valeurs de première classe, éliminant le besoin de astuces de métaprogrammation courantes dans les langages dynamiques. Pour passer une fonction comme argument à une autre fonction, nous pouvons simplement utiliser la prise en charge inhérente de Golang pour les valeurs de fonction. Voici un exemple :
package main import "fmt" func someFunction1(a, b int) int { return a + b } func someFunction2(a, b int) int { return a - b } func someOtherFunction(a, b int, f func(int, int) int) int { return f(a, b) } func main() { fmt.Println(someOtherFunction(111, 12, someFunction1)) fmt.Println(someOtherFunction(111, 12, someFunction2)) }
L'exécution de ce programme produira le résultat suivant :
123 99
Maintenant, considérons un scénario dans lequel la sélection de la fonction dépend d'un temps d'exécution. seule valeur connue. Pour gérer cela, nous pouvons créer une carte qui associe les noms de fonctions à leurs pointeurs de fonction respectifs :
m := map[string]func(int, int) int{ "someFunction1": someFunction1, "someFunction2": someFunction2, } ... z := someOtherFunction(x, y, m[key])
De cette façon, nous pouvons passer une fonction comme argument par son nom, en sélectionnant dynamiquement la fonction souhaitée à exécution.
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!