Memanggil Kaedah Struktur dengan Nama dalam Go
Soalan ini meneroka kemungkinan memanggil kaedah pada struct dengan namanya dalam Go. Penanya mencari penyelesaian yang berbentuk CallFunc("MyStruct", "MyMethod"). Untuk menangani keperluan ini, kami akan menyelidiki penggunaan refleksi dalam Go.
Merefleksikan Nilai dan Kaedah
Kunci untuk memanggil kaedah dengan nama terletak pada menggunakan pakej pantulan. Fungsi reflect.ValueOf boleh menghasilkan reflect.Value yang merangkum nilai pembolehubah. Untuk struct, anda boleh mendapatkan nilai yang mewakili struct itu sendiri atau penunjuk kepadanya.
Setelah anda mempunyai reflect.Value, anda boleh menggunakan kaedah MethodByName untuk mencari kaedah dengan namanya. Ini mengembalikan objek refleksi.Kaedah, yang mewakili kaedah yang dikenal pasti.
Menyatukan Semuanya
Untuk melengkapkan proses memanggil kaedah mengikut nama, anda boleh memanggil kaedah Panggilan pada refleksi.Kaedah. Ini memerlukan tatasusunan objek refleksi.Nilai sebagai argumen, mewakili parameter yang akan dihantar kepada kaedah yang dipanggil.
Dalam contoh kod yang disediakan, struktur T mempunyai kaedah Foo. Untuk memanggil kaedah ini menggunakan pantulan, anda akan mendapatkan semula pantulan.Nilai &t (penunjuk kepada tika T), cari kaedah Foo menggunakan MethodByName, dan akhirnya gunakannya dengan Panggilan.
package main import "fmt" import "reflect" type T struct {} func (t *T) Foo() { fmt.Println("foo") } func main() { var t T reflect.ValueOf(&t).MethodByName("Foo").Call([]reflect.Value{}) }
Melaksanakan kod ini mencetak "foo", menunjukkan kejayaan panggilan kaedah Foo mengikut nama. Pendekatan ini menyediakan cara serba boleh untuk berinteraksi dengan struct dan kaedahnya secara dinamik semasa masa jalan.
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!