首頁 > 後端開發 > Golang > 取得結構體中的欄位名稱

取得結構體中的欄位名稱

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
發布: 2024-02-06 08:25:03
轉載
1079 人瀏覽過

取得結構體中的欄位名稱

問題內容

我寫了一個程式來檢索結構內的欄位名稱,並且它運作得很好。但是,當涉及到結構體內部的結構體指標時,它不起作用。

https://go.dev/play/p/pHrNRhfZSM4

在檢查類型指標結構時,它使用反射包顯示“Ptr”,但是當我執行 Elem() 時,它說有什麼方法可以解決這個問題嗎?

我只想取得 MAP 中帶有「encr」標記的每個欄位名稱。


正確答案


使用類型而不是值:

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)
        }
    }
}
登入後複製

呼叫方法如下:

listOfEncTags := make(map[string]int)
getEncFields(reflect.TypeOf(Gadget{}), listOfEncTags)
fmt.Println(listOfEncTags)
登入後複製

https://www.php.cn/link/761213bcd999998a5b22d22b13db075f

以上是取得結構體中的欄位名稱的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:stackoverflow.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板