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)) } } }