Rumah > Artikel > pembangunan bahagian belakang > Pelbagai jenis fungsi dalam pemetaan, Golang
Map ialah struktur data yang berkuasa di Golang yang membolehkan kami mengaitkan satu nilai dengan nilai lain. Di Golang, kita boleh menggunakan pemetaan untuk melaksanakan pelbagai jenis fungsi. Editor PHP Youzi akan memperkenalkan pelbagai jenis fungsi dalam pemetaan dalam artikel ini, termasuk fungsi biasa, fungsi tanpa nama dan kaedah. Bukan itu sahaja, kami akan meneroka cara menggunakan fungsi sebagai nilai dalam pemetaan dan menunjukkan kuasa dan fleksibilitinya. Sama ada anda seorang pemula atau pembangun Golang yang berpengalaman, artikel ini akan memberikan anda pengetahuan dan contoh yang berguna untuk membantu anda memahami dan menggunakan jenis fungsi dengan lebih baik dalam pemetaan. Mari mulakan meneroka!
Saya mahu menyambungkan input pengguna ke fungsi. Input pengguna ialah rentetan. Sebagai contoh,
"func_name=MyPrintf&s1=你好,世界!"
atau
"func_name=MyAdd&i1=1&i2=2"
Kod setiap fungsi ialah,
func MyPrintf(s1 string) { fmt.Println(s1) } func MyAdd(i1, i2 int) { fmt.Println(i1, i2) }
Saya ingin peta seperti di bawah,
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 boleh memanggil fungsi melalui rentetan func_name yang dimasukkan oleh pengguna.
myMap[func_name](s1)
Output: Hello, dunia!
myMap[func_name](i1, i2)
Keluaran: 3
Adakah ini mungkin? Mungkin saya fikir menggunakan "eval" adalah mungkin, tetapi saya mendengar bahawa menggunakan "eval" adalah buruk. Jadi, saya terfikir untuk menggunakan penunjuk fungsi, tetapi tiada penunjuk fungsi di Golang.
Saya mencuba beberapa pengaturcaraan umum Golang,
type Myfunc interface { func(string) | func(int, int) } myMap := make(map[string]Myfunc)
Output: Ralat berlaku: tidak boleh menggunakan jenis Myfunc di luar kekangan jenis: antara muka mengandungi kekangan jenis
Cuba lagi,
myMap := make(map[string]interface{}) myMap["MyPrintf"] = interface{}(MyPrintf) myMap["MyPrintf"].(func(string))("Hello, world!")
Output: Hello, dunia!
myMap["MyAdd"] = interface{}(MyAdd) myMap["MyAdd"].(func(int,int))(1, 2)
Keluaran: 3
Ia berfungsi, tetapi anda perlu menentukan jenis fungsi yang betul, yang tidak begitu selesa. Saya rasa cara ini tidak sesuai untuk senario saya. Tolong beri saya bantuan. Saya minta maaf atas penulisan bahasa Inggeris saya yang teruk.
Anda boleh mencuba ini:
Saya mesti mengatakan ini bukan amalan yang baik kerana ralat panik disebabkan oleh jenis yang salah tidak disahkan. Saya akan mempertimbangkan pendekatan lain.
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) }
Atas ialah kandungan terperinci Pelbagai jenis fungsi dalam pemetaan, Golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!