Penunjuk ke Fungsi daripada String in Go
Metaprogramming, atau keupayaan untuk memanipulasi kod itu sendiri semasa runtime, ialah teknik yang berkuasa dalam pengaturcaraan. Dalam Go, satu aspek yang mungkin timbul ialah keperluan untuk mengakses penuding kepada fungsi berdasarkan namanya, yang disediakan sebagai rentetan.
Penyelesaian
Tidak seperti bahasa dinamik, fungsi Go dianggap sebagai nilai kelas pertama. Ini bermakna fungsi boleh dihantar sebagai hujah kepada fungsi lain, menghapuskan keperluan untuk teknik pengaturcaraan meta yang kompleks.
Untuk menunjukkan ini, pertimbangkan coretan kod berikut:
package main import "fmt" func someFunction1(a, b int) int { return a + b } func someFunction2(a, b int) int { return a - b } func someOtherFunction(a, b int, f func(int, int) int) int { return f(a, b) } func main() { fmt.Println(someOtherFunction(111, 12, someFunction1)) fmt.Println(someOtherFunction(111, 12, someFunction2)) }
Pelaksanaan
Apabila kod ini dilaksanakan, ia akan menghasilkan yang berikut output:
123 99
Ini menunjukkan cara fungsi boleh dihantar sebagai argumen kepada someOtherFunction, berdasarkan nama mereka.
Pemilihan Fungsi Tersuai
Jika pemilihan fungsi bergantung pada nilai yang hanya diketahui semasa runtime, anda boleh menggunakan peta untuk mengaitkan nama fungsi dengan yang sepadan penunjuk fungsi:
m := map[string]func(int, int) int{ "someFunction1": someFunction1, "someFunction2": someFunction2, } ... z := someOtherFunction(x, y, m[key])
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Memanggil Fungsi Go Menggunakan Namanya (String) pada Runtime?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!