Mendapatkan semula refleksi.Jenis untuk Jenis Berdasarkan Jenis Primitif
Dalam Go, menentukan pantulan.Jenis jenis boleh menjadi rumit apabila jenis melaksanakan antara muka berdasarkan jenis primitif. Sebagai contoh, pertimbangkan senario berikut:
type ID interface { myid() } type id string func (id) myid() {} func main() { id := ID(id("test")) fmt.Println(id) fmt.Println(reflect.TypeOf(id)) // How to get the kind to return "reflect.Interface" from the var "id"? fmt.Println(reflect.TypeOf(id).Kind()) }
Dalam contoh ini, antara muka ID dilaksanakan mengikut jenis id, yang berdasarkan jenis rentetan primitif. Walaupun kita mahu reflect.TypeOf(id).Kind() untuk mengembalikan reflect.Antaramuka, ia sebaliknya mengembalikan reflect.String.
Penyelesaian menggunakan Penunjuk ke Antara Muka
Kepada menyelesaikan isu ini, kita perlu ingat bahawa reflect.TypeOf() mengharapkan antara muka{}. Apabila bekerja dengan nilai bukan antara muka, Go membungkusnya secara automatik dalam antara muka{} secara tersirat. Untuk mengelakkan perkara ini, kami boleh menggunakan penuding ke antara muka.
t := reflect.TypeOf(&id).Elem() fmt.Println(t.Kind())
Dengan menggunakan reflect.TypeOf(&id).Elem(), kami mendapatkan semula deskriptor jenis antara muka ID, iaitu apa yang kami ada. berminat. Kaedah Elem() memberikan kami jenis elemen jenis penunjuk, iaitu jenis antara muka.
Menjalankan kod yang dikemas kini kini akan output:
test main.ID interface
Ini menunjukkan cara mendapatkan pantulan dengan betul. Jenis untuk jenis yang melaksanakan antara muka berdasarkan jenis primitif.
Atas ialah kandungan terperinci Bagaimana untuk Mendapatkan `reflect.Kind.Interface` untuk Jenis Melaksanakan Antara Muka Berdasarkan Jenis Primitif dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!