2 回答
TA贡献2011条经验 获得超2个赞
尝试这个:
if varKind == reflect.Struct { iterateStruct(e.Field(i).Interface())}
e.Field(i)
返回Value
结构字段的 。Interface{}
将返回基础值,因此您可以iterateStruct
使用它调用。
TA贡献1871条经验 获得超13个赞
这是一个处理带有指向结构的指针的字段、包含结构值的接口等的示例。作为奖励,这个示例缩进了嵌套结构。
func iterate(v reflect.Value, indent string) {
v = reflect.Indirect(v)
if v.Kind() != reflect.Struct {
return
}
indent += " "
for i := 0; i < v.NumField(); i++ {
varName := v.Type().Field(i).Name
varKind := v.Field(i).Kind()
varType := v.Type().Field(i).Type
varValue := v.Field(i).Interface()
fmt.Printf("%s%v %v %v %v\n", indent, varName, varKind, varType, varValue)
iterate(v.Field(i), indent)
}
}
像这样称呼它:
iterate(reflect.ValueOf(s), "")
https://go.dev/play/p/y1CzbKAUvD_w
- 2 回答
- 0 关注
- 96 浏览
添加回答
举报