| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 | 
							- package ii
 
- import (
 
- 	"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 = c.Fields[i].Type.Default()
 
- 			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
 
- 		}
 
- 	}
 
- }
 
 
  |