golang的reflect
发布时间:2020-12-16 09:35:36 所属栏目:大数据 来源:网络整理
导读:引用自 http://www.jb51.net/article/115002.htm ? 不同结构体字段赋值函数如下。 函数说明:传入参数from和to都是指针变量。只支持不同结构体同名且相同值类型字段赋值(可优化,加一个字段映射,并兼容int与string相互赋值)。 func CopyStruct (from,to int
|
引用自 http://www.aspzz.cn/article/115002.htm ? 不同结构体字段赋值函数如下。 函数说明:传入参数from和to都是指针变量。只支持不同结构体同名且相同值类型字段赋值(可优化,加一个字段映射,并兼容int与string相互赋值)。 func CopyStruct (from,to interface{}) (bool) {
typFrom := reflect.TypeOf(from)
valFrom := reflect.Indirect(reflect.ValueOf(from))
typTo := reflect.TypeOf(to)
valTo := reflect.Indirect(reflect.ValueOf(to))
if typFrom.Kind() != reflect.Ptr || typTo.Kind() != reflect.Ptr ||
valFrom.Kind() != reflect.Struct || valTo.Kind() != reflect.Struct {
return false
}
typTo = typTo.Elem()
typFrom = typFrom.Elem()
for i := 0; i < typTo.NumField(); i ++ {
toField := typTo.Field(i)
toFieldName := toField.Name
_,exists := typFrom.FieldByName(toFieldName)
if !exists || !valTo.FieldByName(toFieldName).CanSet() {
continue
}
if valFrom.FieldByName(toFieldName).Kind() == valTo.FieldByName(toFieldName).Kind() {
valTo.FieldByName(toFieldName).Set(valFrom.FieldByName(toFieldName))
}
}
return true
}
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
