Dapatkan nama medan dalam struktur

WBOY
Lepaskan: 2024-02-06 08:25:03
ke hadapan
994 orang telah melayarinya

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)
        }
    }
}
Salin selepas log masuk

Kaedah panggilan adalah seperti berikut:

listOfEncTags := make(map[string]int)
getEncFields(reflect.TypeOf(Gadget{}), listOfEncTags)
fmt.Println(listOfEncTags)
Salin selepas log masuk

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!

sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan