您的位置:首页 > 编程语言 > Go语言

go结构体转换

2018-11-07 14:35 267 查看
//使用反射,转换结构体
func SourceToTarget(sourceStruct interface{}, targetStruct interface{}) {
source := structToMap(sourceStruct)
targetV := reflect.ValueOf(targetStruct).Elem()
targetT := reflect.TypeOf(targetStruct).Elem()
for i := 0; i < targetV.NumField(); i++ {
fieldName := targetT.Field(i).Name
sourceVal := source[fieldName]
if !sourceVal.IsValid() {
continue
}
targetVal := targetV.Field(i)
targetVal.Set(sourceVal)
}
}

func structToMap(structName interface{}) map[string]reflect.Value {
t := reflect.TypeOf(structName).Elem()
v := reflect.ValueOf(structName).Elem()
fieldNum := t.NumField()
resMap := make(map[string]reflect.Value, fieldNum)
for i := 0; i < fieldNum; i++ {
resMap[t.Field(i).Name] = v.Field(i)
}
return resMap
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: