Pointeur vers une fonction depuis une chaîne dans Go
La métaprogrammation, ou la capacité de manipuler le code lui-même au moment de l'exécution, est une technique puissante en programmation. Dans Go, un aspect qui peut survenir est la nécessité d'accéder à un pointeur vers une fonction en fonction de son nom, qui est fourni sous forme de chaîne.
Solution
Contrairement à langages dynamiques, les fonctions Go sont considérées comme des valeurs de première classe. Cela signifie que les fonctions peuvent être transmises comme arguments à d'autres fonctions, éliminant ainsi le besoin de techniques de métaprogrammation complexes.
Pour démontrer cela, considérons l'extrait de code suivant :
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)) }
Exécution
Lorsque ce code est exécuté, il produira le résultat suivant :
123 99
Ceci montre comment les fonctions peuvent être transmises comme arguments à someOtherFunction, en fonction de leurs noms.
Sélection de fonction personnalisée
Si la sélection de la fonction dépend d'une valeur qui est uniquement connu au moment de l'exécution, vous pouvez utiliser une carte pour associer les noms de fonctions avec leurs pointeurs de fonction correspondants :
m := map[string]func(int, int) int{ "someFunction1": someFunction1, "someFunction2": someFunction2, } ... z := someOtherFunction(x, y, m[key])
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!