Maison  >  Article  >  développement back-end  >  carte de fonction golang passée en paramètre

carte de fonction golang passée en paramètre

PHPz
PHPzoriginal
2024-04-22 11:42:02895parcourir

Dans Go, les mappages de fonctions peuvent être passés comme arguments aux fonctions, permettant la réutilisation et la personnalisation du code : Créez un mappage de fonctions : utilisez le type map[string]interface{}, avec le nom de la fonction comme clé et la fonction elle-même comme valeur. . Passer en argument : utilisez le type funcMap dans la liste des arguments de fonction pour accepter une carte de fonction. Exécuter une fonction : récupérez une fonction de la carte de fonctions via le package Reflect et appelez-la avec des arguments variables. Cas pratique : le mappage de fonctions peut être transmis au moteur de modèle pour exécuter dynamiquement les fonctions du modèle au moment de l'exécution.

carte de fonction golang passée en paramètre

Function map passée en argument dans Go

Function map est une structure de données avancée qui permet d'utiliser des fonctions comme clés pour stocker d'autres valeurs. Dans Go, les mappages de fonctions peuvent être utilisés comme arguments pour les fonctions, offrant ainsi une réutilisation puissante et une personnalisation du code.

Créer une carte de fonctions

Une carte de fonctions est créée en utilisant le type map[string]interface{}, où la clé est le nom de la fonction (chaîne) et la valeur est la fonction elle-même (Le type interface{ } permet le stockage de n'importe quel type). Par exemple : map[string]interface{} 类型创建,其中键是函数名称(字符串),值是该函数本身(interface{} 类型允许存储任何类型)。例如:

funcMap := map[string]interface{}{
    "greet": func(name string) string {
        return fmt.Sprintf("Hello, %s!", name)
    },
    "add": func(a, b int) int {
        return a + b
    },
}

作为参数传递函数映射

我们可以在函数的参数列表中使用 funcMap 类型来接受函数映射作为参数。例如:

func executeFunction(name string, args ...interface{}) (interface{}, error) {
    if fn, ok := funcMap[name]; ok {
        return fn.(func(...interface{}) interface{})(args...), nil
    }

    return nil, fmt.Errorf("function '%s' not found in function map", name)
}

在这个函数中,我们根据给定的名称 (name) 从 funcMap 中检索函数,并使用 reflect 包来调用它。我们还可以传递任意数量的参数(...interface{}),这些参数将作为函数的参数。

实战案例:动态模板

函数映射通常用于传递给模板引擎,从而允许在运行时动态执行函数。例如,我们可以创建一个 Html 模板:

<h1>Hello, {{ greet "John" }}!</h1>
<h1>{{ add 3 5 }}</h1>

然后,我们在 Go 程序中传递 funcMap 给模板引擎:

t, err := template.New("demo").Funcs(funcMap).ParseFiles("template.html")
if err != nil {
    // 处理错误
}

t.Execute(w, nil)

通过将 funcMap 传递给模板引擎,我们能够在模板中使用 greetaddrrreee

Passer une map de fonction en paramètre

On peut utiliser le type funcMap dans la liste des paramètres d'une fonction pour accepter une map de fonction en paramètre. Par exemple :

rrreee

Dans cette fonction, nous récupérons la fonction du funcMap en fonction du nom donné (name) et utilisons le reflect package pour l’appeler. Nous pouvons également transmettre n'importe quel nombre de paramètres (...interface{}) qui seront utilisés comme arguments à la fonction. 🎜🎜🎜Exemple pratique : modèles dynamiques 🎜🎜🎜Le mappage de fonctions est souvent utilisé pour transmettre aux moteurs de modèles, permettant aux fonctions d'être exécutées dynamiquement au moment de l'exécution. Par exemple, on peut créer un modèle Html : 🎜rrreee🎜 Ensuite, on passe funcMap au moteur de modèle dans le programme Go : 🎜rrreee🎜En passant funcMap au modèle moteur, nous pouvons utiliser les fonctions greet et add dans le modèle pour imprimer "Bonjour, John!" 🎜🎜🎜Conclusion🎜🎜🎜Passer des cartes de fonctions comme arguments est une technique puissante pour permettre la réutilisation et la personnalisation du code dans Go. En créant des mappages de fonctions et en les transmettant aux fonctions, nous pouvons exécuter dynamiquement des fonctions et personnaliser le comportement du code au moment de l'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!

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