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
Libérer: 2024-12-10 22:15:14
original
857 Les gens l'ont consulté

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")
    }
}
Copier après la connexion

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)
    }
}
Copier après la connexion

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!

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