我编写了一个程序来检索结构内的字段名称,并且它工作得很好。但是,当涉及到结构体内部的结构体指针时,它不起作用。
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中文网其他相关文章!