Maison >développement back-end >Golang >Comment puis-je utiliser les noms de fonctions de chaîne pour appeler des fonctions de manière dynamique dans Go ?

Comment puis-je utiliser les noms de fonctions de chaîne pour appeler des fonctions de manière dynamique dans Go ?

DDD
DDDoriginal
2024-12-05 17:05:12406parcourir

How Can I Use String Function Names to Call Functions Dynamically in Go?

Utilisation de pointeurs de fonction avec des noms de fonctions de chaîne dans Go

Dans Go, il est possible de récupérer un pointeur de fonction à partir du nom d'une fonction fourni sous forme de chaîne. Cette fonctionnalité est précieuse dans les scénarios de métaprogrammation, tels que l'appel dynamique de fonctions basées sur des paramètres de chaîne.

Contrairement à certains langages dynamiques, les fonctions Go sont des valeurs de première classe. Par conséquent, vous pouvez transmettre directement des fonctions comme arguments à d’autres fonctions. Prenons l'exemple 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))
}

Sortie :

123
99

Dans cet exemple, someOtherFunction prend deux arguments entiers et un pointeur de fonction (le paramètre f). Il appelle ensuite la fonction fournie avec les arguments donnés. Le résultat est imprimé.

Si la sélection de la fonction dépend d'une valeur connue uniquement au moment de l'exécution, vous pouvez utiliser une map :

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!

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