| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 | package iiimport (	"fmt"	"math"	"reflect"	"runtime"	"strings"	"golib/features/mo")func getCallerName() string {	pc, _, _, _ := runtime.Caller(2)	return runtime.FuncForPC(pc).Name()}func valueType(v any) string {	if v == nil {		return "nil"	}	return reflect.ValueOf(v).Type().String()}func toFloat64Decimal(f float64, decimal int) float64 {	if decimal <= 0 {		return f	}	float := math.Pow(10, float64(decimal))	return math.Round(f*float) / float}func indexEqual(str, prefix, suffix string) bool {	return strings.Index(str, prefix) == 0 && strings.LastIndex(str, suffix) == len(str)-1}func covertArray(field *FieldInfo, value any, target *mo.A, idx int) error {	switch field.Items {	case "", FieldItemsArray:		(*target)[idx] = value	case FieldItemsObject:		obj, err := field.convertObject(value)		if err != nil {			return errCovertRetErr(field, value, err)		}		(*target)[idx] = obj	case FieldItemsObjectId:		oid, err := field.convertObjectID(value)		if err != nil {			return errCovertRetErr(field, value, err)		}		(*target)[idx] = oid	default:		return fmt.Errorf("convertArray: unsupported Items: %s", field.Items)	}	return nil}// fieldEnableType 启用的数据类型// MongoDB 数据类型众多, 并非所有类型都适用于实际开发环境, 特在此处添加已启用的类型. 使用未启用的类型时会在 Unmarshal 时报错var (	fieldEnableType = map[mo.Type]struct{}{		mo.TypeDouble:   {},		mo.TypeString:   {},		mo.TypeObject:   {},		mo.TypeArray:    {},		mo.TypeObjectID: {},		mo.TypeBoolean:  {},		mo.TypeDateTime: {},		mo.TypeInt64:    {},	})func isEnabledType(t mo.Type) bool {	_, ok := fieldEnableType[t]	return ok}var (	// internalField 内部字段	internalField = map[string]FieldInfo{		ID:           idInfo,		Creator:      creatorInfo,		CreationTime: creationTimeInfo,	})var (	idInfo = FieldInfo{		Name:     ID,		Type:     mo.TypeObjectID,		Required: true,		Unique:   true,		Label:    ID,		Default:  "new",	}	creatorInfo = FieldInfo{		Name:     Creator,		Type:     mo.TypeObjectID,		Required: true,		Unique:   false,		Label:    "创建人",	}	creationTimeInfo = FieldInfo{		Name:     CreationTime,		Type:     mo.TypeDateTime,		Required: true,		Unique:   false,		Label:    "创建时间",		Default:  "now",	})
 |