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 }
相关文章推荐
- Go语言结构体与二进制数组转换
- Go语言结构体定义和使用方法
- go语言结构体
- 结构体与字节流的相互转换
- iOS 自定义结构体、结构体转换成对象
- 对照 Ruby 学 Go (Part 6): 结构体,方法与接口
- go语言string、int、int64互相转换以及时间转换
- C#调用C++写的dll,包含结构体转换和C#动态调用dll(头文件转换为类)
- 关于C#结构体和byte[]之间的转换
- 关于结构体与类型转换的一点小技巧
- Go语言学习笔记十: 结构体
- Go IP 地址字符串整数/string int 相互转换
- 强制类型(结构体)转换NULL-----C指针的黑科技
- Java类和C结构体之间自动转换
- go语言string、int、int64互相转换
- [C#]结构体间实现用户定义的转换
- char*指针强制转换成一个指向结构体的指针
- go语言之整形和字节数组的转换
- 结构体/字符串之间的转换
- Go语言指针访问结构体的方法