package util import ( "fmt" "reflect" ) /* 合并两个结构体的值,遍历结构体s1,若s1中某字段值为空,则将s2该字段的值赋给s1,否则不变 参数:interface{} -> &struct, 结构体指针 返回值:interface{} -> &struct, 结构体指针 */ func MergeStructValue(s1 interface{}, s2 interface{}) interface{} { v1 := reflect.ValueOf(s1).Elem() v2 := reflect.ValueOf(s2).Elem() for i := 0; i < v1.NumField(); i++ { field := v1.Field(i) name := v1.Type().Field(i).Name if field.Interface() == reflect.Zero(field.Type()).Interface() { fmt.Printf("%+v %+v", name, v1.Kind() == reflect.Ptr) v1.FieldByName(name).Set(v2.FieldByName(name)) } } return v1 }