Retrieve Reflect.Jenis untuk Jenis Berdasarkan Primitif: Penjelasan Terperinci
Selalunya, pembangun menghadapi keperluan untuk menentukan refleksi.Jenis jenis yang mempunyai pelaksanaan asas berdasarkan jenis primitif, seperti sebagai:
type ID interface { myid() } type id string func (id) myid() {}
Dalam contoh di atas, jenis "id" melaksanakan antara muka "ID" menggunakan rentetan asas primitif. Cabarannya terletak pada mendapatkan semula pantulan.Nilai antara muka dan bukannya pantulan lalai.Jenis rentetan.
Menyingkap Penyelesaian: Penunjuk ke Antara Muka
Salah tanggapan yang biasa adalah untuk lulus nilai jenis "id" untuk mencerminkan.TypeOf(). Walau bagaimanapun, ini menghasilkan pembungkusan semula tersirat nilai ke dalam antara muka{} dengan rentetan tertanam primitif.
Kunci untuk mengatasi halangan ini ialah memanfaatkan penuding ke antara muka. Dengan menghantar penuding, deskriptor jenis membalut antara muka{}, menghalang pembungkusan semula. Selepas itu, kita boleh menggunakan Type.Elem() untuk mendapatkan semula deskriptor jenis antara muka runcing, yang akan mencerminkan sifat antara muka jenis dengan tepat.
id := ID(id("test")) t := reflect.TypeOf(&id).Elem() fmt.Println(t.Kind()) // Output: interface
Pendekatan ini mendedahkan refleksi yang diingini dengan berkesan. Jenis antara muka untuk jenis berakar pada primitif.
Cerapan Tambahan: Penunjuk ke Antara Muka Faedah
Teknik ini bukan sahaja menyelesaikan masalah awal tetapi juga menyerlahkan faedah menggunakan penunjuk ke antara muka. Dalam kes tertentu, seperti menghantar nilai kepada fungsi yang menjangkakan jenis tertentu (cth., Rentetan atau Masa), penunjuk ke antara muka boleh berfaedah untuk mengelakkan penukaran tersirat.
Dengan mengikut garis panduan ini, pembangun boleh dengan tepat dapatkan semula refleksi.Jenis jenis yang berasal daripada primitif, memperoleh pemahaman yang lebih mendalam tentang keupayaan refleksi Go.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Dapatkan `Reflection.Jenis` Jenis Antara Muka yang Mendasari Primitif dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!