Maison > développement back-end > Golang > Comment puis-je stocker et appeler des fonctions de manière dynamique à l'aide de Maps in Go ?

Comment puis-je stocker et appeler des fonctions de manière dynamique à l'aide de Maps in Go ?

Patricia Arquette
Libérer: 2024-12-12 21:43:09
original
284 Les gens l'ont consulté

How Can I Store and Invoke Functions Dynamically Using Maps in Go?

Stockage de fonctions dans une carte dans Go

Dans Go, les cartes sont des structures de données polyvalentes qui peuvent stocker des paires clé-valeur. Parfois, il est utile de stocker des fonctions dans une carte, permettant une invocation dynamique basée sur une clé.

Problème :

Disons que vous avez plusieurs fonctions et que vous souhaitez créer une carte où la clé est le nom de la fonction et la valeur est la fonction elle-même. Cependant, lorsque vous tentez cette opération comme indiqué ci-dessous, vous rencontrez une erreur :

func a(param string) {}

m := map[string]func{} 
'a_func': a,
}

for key, value := range m {
    if key == 'a_func' {
        value(param) 
    }
}
Copier après la connexion

Solution :

Le problème se pose car la syntaxe permettant de définir une carte spécifique à un type est incorrect. Pour résoudre ce problème, vous pouvez utiliser la syntaxe map[string]interface{} à la place, car la sécurité des types n'est pas appliquée pour les valeurs. L'exemple modifié ci-dessous illustre comment stocker et appeler des fonctions à partir de la carte :

package main

import "fmt"

func f(p string) {
    fmt.Println("function f parameter:", p)
}

func g(p string, q int) {
    fmt.Println("function g parameters:", p, q)
}

func main() {
    m := map[string]interface{}{
        "f": f,
        "g": g,
    }
    for k, v := range m {
        switch k {
        case "f":
            v.(func(string))("astring")
        case "g":
            v.(func(string, int))("astring", 42)
        }
    }
}
Copier après la connexion

Dans cet exemple, la carte m stocke deux valeurs de fonction en tant qu'interface{}. Lors de l'appel des fonctions basées sur la clé, une assertion de type est effectuée pour convertir la valeur de l'interface en type de fonction correct.

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal