22 lines
514 B
Go
Executable File
22 lines
514 B
Go
Executable File
package utils
|
||
|
||
import "reflect"
|
||
|
||
// CopySameFields 利用反射,将a中的所有同名字段的值 复制到b中的对应字段
|
||
func CopySameFields(source, target interface{}) {
|
||
va := reflect.ValueOf(source).Elem()
|
||
vb := reflect.ValueOf(target).Elem()
|
||
|
||
for i := 0; i < va.NumField(); i++ {
|
||
// 忽略source中 空值的部分
|
||
if va.Field(i).IsZero() {
|
||
continue
|
||
}
|
||
|
||
fieldName := va.Type().Field(i).Name
|
||
if vb.FieldByName(fieldName).IsValid() {
|
||
vb.FieldByName(fieldName).Set(va.Field(i))
|
||
}
|
||
}
|
||
}
|