Menemui Kebolehcapaian Medan dalam Antara Muka dengan Refleksi
Sifat dinamik antara muka menimbulkan persoalan bagaimana untuk memastikan medan yang boleh diakses dalam objek balasan . Walaupun refleksi menawarkan penyelesaian, ia memerlukan pengetahuan awal tentang nama medan. Artikel ini meneroka cara untuk mendapatkan semula semua medan yang tersedia melalui aplikasi teknik refleksi yang bertimbang rasa.
Dengan pengenalan reflect.TypeOf(), laluan terbuka untuk mendapatkan reflect. Taip deskriptor. Deskriptor ini membolehkan penghitungan medan yang dikaitkan dengan nilai dinamik yang dipegang dalam antara muka.
Pertimbangkan contoh berikut:
type Point struct { X int Y int } var reply interface{} = Point{1, 2} t := reflect.TypeOf(reply) for i := 0; i < t.NumField(); i++ { fmt.Printf("%+v\n", t.Field(i)) }
Output yang dijana oleh coretan kod ini menggambarkan kejayaan mendapatkan semula medan maklumat:
{Name:X PkgPath: Type:int Tag: Offset:0 Index:[0] Anonymous:false} {Name:Y PkgPath: Type:int Tag: Offset:4 Index:[1] Anonymous:false}
Setiap medan diterangkan oleh a reflect.StructField struct, memberikan butiran seperti nama medan.
Untuk mendapatkan nilai medan, reflect.ValueOf() boleh digunakan untuk memperoleh refleksi.Nilai. Nilai ini membenarkan akses kepada medan melalui kaedah Field() atau FieldByName():
v := reflect.ValueOf(reply) for i := 0; i < v.NumField(); i++ { fmt.Println(v.Field(i)) }
Ini menghasilkan output berikut:
1 2
Nota: Dalam senario di mana penunjuk ke struktur dibalut dalam antara muka, Type.Elem() dan Value.Elem() boleh dimanfaatkan untuk menavigasi ke jenis atau nilai asas.
Akhir sekali, untuk mengambil kira situasi di mana kehadiran penunjuk tidak pasti, Type.Kind() dan Value.Kind() boleh digunakan untuk membandingkan dengan reflect.Ptr.
Untuk panduan komprehensif untuk refleksi dalam Go, rujuk catatan blog "The Undang-undang Refleksi."
Atas ialah kandungan terperinci Bagaimanakah Refleksi Boleh Digunakan untuk Menemui Medan Boleh Diakses dalam Antara Muka Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!