Maison >développement back-end >Golang >Comment puis-je mapper des fonctions avec différentes signatures dans Go ?

Comment puis-je mapper des fonctions avec différentes signatures dans Go ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-10 22:15:14872parcourir

How Can I Map Functions with Different Signatures in Go?

Fonctions de cartographie dans Go

Dans Go, les cartes offrent un moyen puissant d'associer des clés à leurs valeurs respectives. Pour mapper des fonctions, la clé est généralement une chaîne représentant le nom ou l'identifiant de la fonction, tandis que la valeur est une référence de fonction.

Exemple :

Considérez ce qui suit Programme Go :

func a(param string) {
    fmt.Println("parameter:", param)
}

m := map[string]func(string) {
    "a": a,
}

for key, value := range m {
    if key == "a" {
        value("hello")
    }
}

Dans cet exemple, une carte m est utilisée pour stocker un mappage entre la clé de chaîne "a" et la référence de fonction a. La boucle parcourt la carte et exécute la fonction associée à la touche "a", en passant la chaîne "hello" comme argument.

Gestion des signatures de fonctions variées :

Cependant, lors de votre première tentative, vous avez rencontré un problème en essayant de stocker des fonctions avec des signatures différentes dans la carte. En effet, le type de valeur dans la carte est déclaré comme func(). Pour gérer des fonctions avec des signatures variables, nous pouvons utiliser une interface comme type de valeur, comme l'interface{} utilisée dans l'exemple révisé suivant :

func f(p string) {}
func g(p string, q int) {}

m := map[string]interface{}{
    "f": f,
    "g": g,
}
for k, v := range m {
    switch k {
    case "f":
        v.(func(string))("astring") // Explicit cast to type func(string)
    case "g":
        v.(func(string, int))("astring", 42) // Explicit cast to type func(string, int)
    }
}

En utilisant le type interface{}, nous autorisons le map pour stocker des valeurs de tout type, y compris des fonctions avec des signatures différentes. Nous utilisons ensuite le casting de type explicite dans la boucle pour exécuter les fonctions avec leurs paramètres respectifs.

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