我有一个嵌套的三层结构。
我想使用Go中的反射来解析它(使用递归函数)。使用反射和递归函数的原因是:
- 可以有各种各样的字段(但前两个字段是固定的)
- 字段类型不固定。
- 嵌套层数的数量可能不同(在这个例子中只有三层。它可以更多)
以下是一些代码。
type Edge struct{
Uid string `json:"uid,omitempty"`
Name string `json:"name,omitempty"`
Read Article `json:"visited,omitempty"`
}
type Article struct {
Uid string`json:"uid,omitempty"`
Namestring`json:"name,omitempty"`
From Site `json:"from,omitempty"`
}
type Site struct{
Uid string `json:"uid,omitempty"`
Name string `json:"name,omitempty"`
}
func CheckNestedStruct(edges interface{}){
rv := reflect.ValueOf(edges).Elem()
uidField := rv.FieldByName("Uid")
uid := getStructField(edges, "Name") // get value of Name from database
if (uid != ""){
uidField.SetString(uid)
}
for i := 0 ; i < rv.NumField() ; i++ {
field := rv.Field(i)
fieldType := field.Kind()
if (fieldType == reflect.Struct){
CheckNestedStruct(field)
}
}
}
func main(){
....
var edges Edges{
...
...
}
CheckNestedStruct(&edges)
}
当我运行这段代码时,在第一层中我得到了“type: *entity.SacWebIS”。然而,在第二次迭代/递归中,我得到了“type: *reflect.rtype”。 我还尝试了
field.Interface()
。
如何修改这段代码?
谢谢。
更新
解决方案是:CheckNestedStruct(dg, field.Addr().Interface())