Maison > développement back-end > Golang > Comment puis-je appeler une fonction Go en utilisant son nom (chaîne) au moment de l'exécution ?

Comment puis-je appeler une fonction Go en utilisant son nom (chaîne) au moment de l'exécution ?

DDD
Libérer: 2024-12-04 18:45:14
original
261 Les gens l'ont consulté

How Can I Call a Go Function Using Its Name (String) at Runtime?

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

Exécution

Lorsque ce code est exécuté, il produira le résultat suivant :

123
99
Copier après la connexion

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])
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