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