Fungsi Pemetaan dalam Go
Dalam Go, peta menyediakan cara yang berkesan untuk mengaitkan kunci dengan nilai masing-masing. Untuk memetakan fungsi, kunci biasanya rentetan yang mewakili nama atau pengecam fungsi, manakala nilainya ialah rujukan fungsi.
Contoh:
Pertimbangkan perkara berikut Program 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") } }
Dalam contoh ini, peta m digunakan untuk menyimpan pemetaan antara kekunci rentetan "a" dan rujukan fungsi a. Gelung berulang di atas peta dan melaksanakan fungsi yang dikaitkan dengan kekunci "a", menghantar rentetan "hello" sebagai hujah.
Mengendalikan Tandatangan Fungsi Pelbagai:
Walau bagaimanapun, dalam percubaan awal anda, anda menghadapi masalah semasa cuba menyimpan fungsi dengan tandatangan berbeza dalam peta. Ini kerana jenis nilai dalam peta diisytiharkan sebagai func(). Untuk mengendalikan fungsi dengan tandatangan yang berbeza-beza, kami boleh menggunakan antara muka sebagai jenis nilai, seperti antara muka{} yang digunakan dalam contoh semakan berikut:
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) } }
Dengan menggunakan jenis antara muka{}, kami membenarkan peta untuk menyimpan nilai apa-apa jenis, termasuk fungsi dengan tandatangan yang berbeza. Kami kemudian menggunakan pemutus jenis eksplisit dalam gelung untuk melaksanakan fungsi dengan parameter masing-masing.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Memetakan Fungsi dengan Tandatangan Berbeza dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!