structFunc.go 659 B

12345678910111213141516171819202122
  1. package util
  2. import "reflect"
  3. /*
  4. 合并两个结构体的值,遍历结构体s1,若s1中某字段值为空,则将s2该字段的值赋给s1,否则不变
  5. 参数:interface{} -> &struct, 结构体指针
  6. 返回值:interface{} -> &struct, 结构体指针
  7. */
  8. func MergeStructValue(s1 interface{}, s2 interface{}) interface{} {
  9. v1 := reflect.ValueOf(s1).Elem()
  10. v2 := reflect.ValueOf(s2).Elem()
  11. for i := 0; i < v1.NumField(); i++ {
  12. field := v1.Field(i)
  13. name := v1.Type().Field(i).Name
  14. if field.Interface() == reflect.Zero(field.Type()).Interface() {
  15. v1.FieldByName(name).Set(v2.FieldByName(name))
  16. }
  17. }
  18. return v1
  19. }