Maison >développement back-end >Golang >Comment puis-je stocker et appeler des fonctions de manière dynamique à l'aide de Maps in 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) } }
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) } } }
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!