我寫了一個程式來檢索結構內的欄位名稱,並且它運作得很好。但是,當涉及到結構體內部的結構體指標時,它不起作用。
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中文網其他相關文章!