Mendapatkan Perwakilan Jenis Secara Terus daripada Nama dalam Go melalui Refleksi
Timbul persoalan sama ada boleh menggunakan perpustakaan refleksi Go untuk memperoleh Jenis perwakilan jenis semata-mata daripada namanya. Motivasi di sebalik soalan ini terletak pada perpustakaan di mana pengguna mesti menyediakan perwakilan Jenis untuk tujuan penjanaan kod.
Pada Masa Jalan
Penukaran langsung ini tidak boleh dilaksanakan pada masa jalan menggunakan perwakilan rentetan nama jenis. Jenis yang tidak dirujuk secara eksplisit semasa penyusunan mungkin tidak terdapat dalam binari boleh laku, menjadikannya "tidak diketahui" semasa masa jalan. Rujuk "Memisahkan Kod Klien/Pelayan" untuk penjelasan yang mendalam. Penyelesaian mungkin ditemui dalam "Panggil semua fungsi dengan awalan atau akhiran khas dalam Golang."
Semasa Pengekodan
Walau bagaimanapun, semasa penulisan atau penjanaan kod sumber, adalah mungkin untuk mencapai ini tanpa mencipta pembolehubah jenis yang diberikan dan panggilan reflect.TypeOf(). Dengan bermula dengan penuding kepada jenis dan menggunakan nilai penuding nol yang ditaip, seseorang boleh menavigasi daripada deskriptor Jenis penuding ke deskriptor jenis asas menggunakan Type.Elem().
Berikut ialah contoh:
t := reflect.TypeOf((*YourType)(nil)).Elem()
Deskriptor Jenis ini, yang diwakili oleh pembolehubah t, akan bersamaan dengan deskriptor t2 yang diperoleh daripada mencipta pembolehubah x daripada jenis YourType dan menerapkan reflect.TypeOf():
var x YourType t2 := reflect.TypeOf(x) fmt.Println(t, t2) fmt.Println(t == t2)
Output:
main.YourType main.YourType true
(Cuba di Taman Permainan Go)
Atas ialah kandungan terperinci Bolehkah Go Reflection Terus Mendapatkan Perwakilan Jenis daripada Namanya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!