Dalam Go, keupayaan untuk memanggil kaedah pada struct mengikut nama menawarkan fleksibiliti yang hebat. Walaupun fungsi MethodByName() wujud, ia tidak boleh digunakan secara langsung untuk struct.
Untuk mencapainya, ikuti langkah berikut:
Mulakan dengan mendapatkan nilai struct menggunakan reflect.ValueOf(&structInstance). Ini memberikan akses kepada maklumat jenis struct.
Gunakan Type.MethodByName() pada jenis struct untuk mendapatkan refleksi kaedah. Ini memerlukan mengetahui nama kaedah tepat yang anda ingin gunakan.
Setelah kaedah diperoleh, panggil kaedah Panggilan() dengan sekeping argumen yang diperlukan untuk melaksanakan kaedah.
Pertimbangkan kod berikut :
type MyStruct struct { // some fields } func (ms *MyStruct) MyMethod() { fmt.Println("My statement.") } func CallMethodByName(s interface{}, methodName string) { v := reflect.ValueOf(s) m := v.Type().MethodByName(methodName) m.Call([]reflect.Value{}) } func main() { ms := MyStruct{} CallMethodByName(&ms, "MyMethod") // Prints "My statement." }
Contoh ini mentakrifkan fungsi tersuai CallMethodByName() yang meniru yang diingini kefungsian. Ia membungkus langkah-langkah yang diperlukan untuk mencari kaedah mengikut nama dan memanggilnya.
Dengan mengikut langkah ini, anda boleh menggunakan kaedah secara dinamik pada struct dalam Go, menawarkan lebih fleksibiliti dan kawalan ke atas tingkah laku kod anda.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Memanggil Kaedah Go Struct dengan Nama Menggunakan Refleksi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!