Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Dapatkan nama medan dalam struktur

Dapatkan nama medan dalam struktur

WBOY
WBOYke hadapan
2024-02-06 08:25:03992semak imbas

Dapatkan nama medan dalam struktur

Kandungan soalan

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".


Jawapan betul


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!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam