Map est une structure de données puissante dans Golang qui nous permet d'associer une valeur à une autre valeur. Dans Golang, nous pouvons utiliser des mappages pour implémenter différents types de fonctions. L'éditeur PHP Youzi présentera différents types de fonctions de mappage dans cet article, y compris les fonctions ordinaires, les fonctions et méthodes anonymes. De plus, nous explorerons comment utiliser les fonctions comme valeurs dans les mappages et démontrerons leur puissance et leur flexibilité. Que vous soyez un développeur Golang débutant ou expérimenté, cet article vous fournira des connaissances utiles et des exemples pour vous aider à mieux comprendre et appliquer les types de fonctions dans les mappages. Commençons à explorer !
Je souhaite connecter l'entrée utilisateur à une fonction. L'entrée utilisateur est une chaîne. Par exemple,
"func_name=MyPrintf&s1=你好,世界!"
ou
"func_name=MyAdd&i1=1&i2=2"
Le code de chaque fonction est,
func MyPrintf(s1 string) { fmt.Println(s1) } func MyAdd(i1, i2 int) { fmt.Println(i1, i2) }
Je voudrais une carte comme celle ci-dessous,
type Myfunc func(string) | func(int, int) // <- Of course, it's wrong code, just I hope like this. myMap := make(map[string]Myfunc) myMap["MyPrintf"] = MyPrintf myMap["MyAdd"] = MyAdd
myMap peut appeler des fonctions via la chaîne func_name saisie par l'utilisateur.
myMap[func_name](s1)
Résultat : Bonjour tout le monde !
myMap[func_name](i1, i2)
Sortie : 3
Est-ce possible ? Peut-être que je pense qu'utiliser "eval" est possible, mais j'ai entendu dire que l'utilisation de "eval" était mauvaise. J'ai donc pensé à utiliser des pointeurs de fonction, mais il n'y a pas de pointeurs de fonction dans Golang.
J'ai essayé un peu de programmation générale Golang,
type Myfunc interface { func(string) | func(int, int) } myMap := make(map[string]Myfunc)
Sortie : une erreur s'est produite : impossible d'utiliser le type Myfunc en dehors des contraintes de type : l'interface contient des contraintes de type
Réessayez,
myMap := make(map[string]interface{}) myMap["MyPrintf"] = interface{}(MyPrintf) myMap["MyPrintf"].(func(string))("Hello, world!")
Sortie : Bonjour tout le monde !
myMap["MyAdd"] = interface{}(MyAdd) myMap["MyAdd"].(func(int,int))(1, 2)
Sortie : 3
Cela fonctionne, mais il faut spécifier le bon type de fonction, ce qui n'est pas très confortable. Je pense que cette méthode ne convient pas à mon scénario. S'il vous plaît, donnez-moi de l'aide. Je suis désolé pour ma mauvaise écriture en anglais.
Vous pouvez essayer ceci :
Je dois dire que ce n'est pas une bonne pratique car les erreurs de panique dues à des types incorrects ne sont pas vérifiées. Je vais envisager une autre approche.
package main import "fmt" type GeneralFunc func(args ...interface{}) func main() { // Create a map of functions with the type GeneralFunc functionsMap := map[string]GeneralFunc{ "MyPrintf": func(args ...interface{}) { fmt.Println(args[0].(string)) }, "MyAdd": func(args ...interface{}) { fmt.Println(args[0].(int), args[1].(int)) }, } // Use the functions from the map functionsMap["MyPrintf"]("Hello World") functionsMap["MyAdd"](2, 3) }
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!