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
Patricia Arquetteoriginal
2024-12-12 21:43:09288parcourir

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

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!

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