Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Mendapatkan Refleksi.Jenis Antara Muka untuk Jenis Go Berdasarkan Jenis Primitif?
Cara Mendapatkan Refleksi.Jenis Antara Muka untuk Jenis Berdasarkan Jenis Primitif
Dalam Go, apabila bekerja dengan jenis yang melaksanakan antara muka tetapi bergantung pada jenis primitif dalam pelaksanaannya, ia menjadi perlu untuk mendapatkan refleksi.Jenis sebagai refleksi.Antaramuka. Artikel ini menangani keperluan ini dan menyediakan penyelesaian.
Masalahnya
Pertimbangkan situasi berikut:
type ID interface { myid() } type id string func (id) myid() {}
Di sini, ID ialah antara muka dilaksanakan oleh id, iaitu rentetan. Apabila kita menggunakan reflect.TypeOf(id) untuk mendapatkan jenis deskriptor, hasilnya bukan reflect yang diingini.Antaramuka sebaliknya reflect.String.
The Solution
Untuk menyelesaikan isu ini, adalah perlu untuk menghantar penunjuk kepada nilai antara muka dan bukannya nilai itu sendiri untuk mencerminkan.TypeOf(). Ini menghalang pembungkusan tersirat nilai dalam antara muka{}.
id := ID(id("test")) t := reflect.TypeOf(&id).Elem() fmt.Println(t.Kind()) // Output: "interface"
Dalam contoh ini, reflect.TypeOf(&id) mengembalikan penunjuk kepada nilai antara muka, yang kemudiannya dibuka menggunakan Elem() ke dapatkan deskriptor jenis antara muka itu sendiri. Pendekatan ini menyediakan pantulan yang diingini.Jenis Antaramuka.
Nota Tambahan
Teknik yang sama boleh digunakan untuk mendapatkan sebarang jenis pantulan.Jenis yang mengembalikan pantulan.Antaramuka apabila memanggil Jenis(). Hanya hantar penunjuk kepada nilai atau jenis untuk mencerminkan.TypeOf().
Atas ialah kandungan terperinci Bagaimana untuk Mendapatkan Refleksi.Jenis Antara Muka untuk Jenis Go Berdasarkan Jenis Primitif?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!