| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 | package iiimport (	"fmt"	"regexp"	"strings")func (c *ItemInfo) init() error {	if err := c.initEnums(); err != nil {		return err	}	if err := c.initValue(); err != nil {		return err	}	if err := c.initPattern(); err != nil {		return err	}	c.initMap()	c.initFieldMap()	return nil}// initFieldMap 创建字段索引func (c *ItemInfo) initFieldMap() {	if c.fieldMap == nil {		c.fieldMap = make(map[string]int)	}	for i := 0; i < len(c.Fields); i++ {		c.fieldMap[c.Fields[i].Name] = i	}}// initEnums 初始化枚举类型值func (c *ItemInfo) initEnums() error {	for i := 0; i < len(c.Fields); i++ {		length := len(c.Fields[i].Enums)		enum := make([]any, length)		for j := 0; j < length; j++ {			val, err := c.Fields[i].Convert(c.Fields[i].Enums[j])			if err != nil {				return fmt.Errorf("%s.%s: initEnums: %s", c.Name, c.Fields[i].Name, err)			}			enum[j] = val		}		c.Fields[i].enums = enum	}	return nil}// initValue 初始化默认值类型func (c *ItemInfo) initValue() error {	for i := 0; i < len(c.Fields); i++ {		if strings.TrimSpace(c.Fields[i].Value) == "" {			c.Fields[i].value = getDefaultValueWith(c.Fields[i].Type)			continue		}		val, err := c.Fields[i].Convert(c.Fields[i].Value)		if err != nil {			return fmt.Errorf("%s.%s: initValue: %s", c.Name, c.Fields[i].Name, err)		}		c.Fields[i].value = val	}	return nil}func (c *ItemInfo) initPattern() error {	for i := 0; i < len(c.Fields); i++ {		if c.Fields[i].Pattern != "" {			regex, err := regexp.Compile(c.Fields[i].Pattern)			if err != nil {				return fmt.Errorf("%s.%s: initPattern: %s", c.Name, c.Fields[i].Name, err)			}			c.Fields[i].pattern = regex		}	}	return nil}// initMap 初始化必填和唯一func (c *ItemInfo) initMap() {	c.requiredMap = make(map[string]int)	c.uniqueMap = make(map[string]int)	for idx, field := range c.Fields {		if field.Required {			c.requiredMap[field.Name] = idx		}		if field.Unique {			c.uniqueMap[field.Name] = idx		}	}}
 |