Saya menulis program untuk mendapatkan semula nama medan di dalam struktur dan ia berfungsi dengan baik. Walau bagaimanapun, ia tidak berfungsi apabila ia datang kepada penunjuk struct di dalam struct.
https://go.dev/play/p/pHrNRhfZSM4
Semasa memeriksa struct penunjuk jenis, ia menunjukkan "Ptr" menggunakan pakej refleksi, tetapi apabila saya melakukan Elem() ia mengatakan adakah terdapat cara untuk membetulkannya?
Saya hanya mahu mendapatkan setiap nama medan dalam MAP yang ditandakan dengan "encr".
Gunakan jenis dan bukannya nilai:
func getencfields(t reflect.type, list map[string]int) { // dereference pointer types. for t.kind() == reflect.ptr { t = t.elem() } // look for tags in struct fields. if t.kind() == reflect.struct { for i := 0; i < t.numfield(); i++ { field := t.field(i) tag := field.tag.get("bson") if containstag(tag, "encr") { list[getfieldname(field, tag)]++ } getencfields(field.type, list) } } }
Kaedah panggilan adalah seperti berikut:
listOfEncTags := make(map[string]int) getEncFields(reflect.TypeOf(Gadget{}), listOfEncTags) fmt.Println(listOfEncTags)
https://www.php.cn/link/761213bcd999998a5b22d22b13db075f
Atas ialah kandungan terperinci Dapatkan nama medan dalam struktur. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!