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
Libérer: 2024-12-05 17:05:12
original
415 Les gens l'ont consulté

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))
}
Copier après la connexion

Sortie :

123
99
Copier après la connexion

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])
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal