package request import ( "git.sxidc.com/go-framework/baize/framework/core/domain" "git.sxidc.com/go-framework/baize/framework/core/tag/assign" "git.sxidc.com/go-tools/utils/reflectutils" "git.sxidc.com/service-supports/fserr" "reflect" ) type Params interface{} func AssignRequestParamsToDomainObject(params Params, domainObject domain.Object) error { return assign.DefaultUsage(params, domainObject) } func Field[T any](params Params, fieldName string) (T, error) { zero := reflectutils.Zero[T]() if params == nil { return zero, fserr.New("请求参数为nil") } fieldValue, err := getRequestParamsValue(params, fieldName) if err != nil { return zero, err } if !fieldValue.IsValid() { return zero, fserr.New("请求参数" + fieldValue.Type().String() + "的字段" + fieldName + "无法赋值") } retValue, ok := fieldValue.Interface().(T) if !ok { return zero, fserr.New("请求参数" + fieldValue.Type().String() + "的字段" + fieldName + "无法转换类型") } return retValue, nil } func ToConcrete[T Params](params Params) (T, error) { zero := reflectutils.Zero[T]() if params == nil { return zero, fserr.New("请求参数为nil") } concrete, ok := params.(T) if !ok { return zero, fserr.New("请求参数转化失败") } return concrete, nil } func getRequestParamsValue(params Params, fieldName string) (*reflect.Value, error) { if params == nil { return nil, fserr.New("请求参数为nil") } paramsValue := reflect.ValueOf(params) if !reflectutils.IsValueStructOrStructPointer(paramsValue) { return nil, fserr.New("请求参数必须是结构或结构指针") } fieldValue := reflectutils.PointerValueElem(paramsValue).FieldByName(fieldName) return &fieldValue, nil }