- 新增 Lookuper 接口,提供 Lookup 和 MustLookup 两种路径查找方式 - Accessor 接口继承 Lookuper,保持向后兼容 - MustLookup 在路径不存在时返回 Nil 访问器,简化调用代码 - 更新 fieldx.Schema 使用 Lookuper 接口,支持更灵活的数据源 - 添加 Required 字段选项,控制字段不存在时的行为
100 lines
2.3 KiB
Go
100 lines
2.3 KiB
Go
package valuex
|
|
|
|
import "reflect"
|
|
|
|
// Lookuper 提供基于路径查找值的能力
|
|
type Lookuper interface {
|
|
// Lookup 根据路径查找并返回对应值的访问器
|
|
Lookup(path string) (Accessor, bool)
|
|
|
|
// MustLookup 根据路径查找并直接返回对应值的访问器
|
|
// 如果路径不存在,返回 Nil 访问器(所有方法返回零值)
|
|
MustLookup(path string) Accessor
|
|
}
|
|
|
|
// Accessor 为参数值转换相关接口
|
|
type Accessor interface {
|
|
Lookuper
|
|
|
|
// Raw 返回底层的 reflect.Value
|
|
Raw() reflect.Value
|
|
|
|
// Ptr 返回指向当前值的指针
|
|
Ptr() any
|
|
|
|
// Any 将当前值转换为 any 类型
|
|
Any() any
|
|
|
|
// Bool 将当前值转换为 bool 类型
|
|
Bool() bool
|
|
|
|
// Float64 将当前值转换为 float64 类型
|
|
Float64() float64
|
|
|
|
// Float32 将当前值转换为 float32 类型
|
|
Float32() float32
|
|
|
|
// Int64 将当前值转换为 int64 类型
|
|
Int64() int64
|
|
|
|
// Int32 将当前值转换为 int32 类型
|
|
Int32() int32
|
|
|
|
// Int16 将当前值转换为 int16 类型
|
|
Int16() int16
|
|
|
|
// Int8 将当前值转换为 int8 类型
|
|
Int8() int8
|
|
|
|
// Int 将当前值转换为 int 类型
|
|
Int() int
|
|
|
|
// Uint 将当前值转换为 uint 类型
|
|
Uint() uint
|
|
|
|
// Uint64 将当前值转换为 uint64 类型
|
|
Uint64() uint64
|
|
|
|
// Uint32 将当前值转换为 uint32 类型
|
|
Uint32() uint32
|
|
|
|
// Uint16 将当前值转换为 uint16 类型
|
|
Uint16() uint16
|
|
|
|
// Uint8 将当前值转换为 uint8 类型
|
|
Uint8() uint8
|
|
|
|
// String 将当前值转换为 string 类型
|
|
String() string
|
|
|
|
// StringMapString 将当前值转换为 map[string]string 类型
|
|
StringMapString() map[string]string
|
|
|
|
// StringMapStringSlice 将当前值转换为 map[string][]string 类型
|
|
StringMapStringSlice() map[string][]string
|
|
|
|
// StringMapBool 将当前值转换为 map[string]bool 类型
|
|
StringMapBool() map[string]bool
|
|
|
|
// StringMapInt 将当前值转换为 map[string]int 类型
|
|
StringMapInt() map[string]int
|
|
|
|
// StringMapInt64 将当前值转换为 map[string]int64 类型
|
|
StringMapInt64() map[string]int64
|
|
|
|
// StringMap 将当前值转换为 map[string]any 类型
|
|
StringMap() map[string]any
|
|
|
|
// Slice 将当前值转换为 []any 切片
|
|
Slice() []any
|
|
|
|
// BoolSlice 将当前值转换为 []bool 切片
|
|
BoolSlice() []bool
|
|
|
|
// StringSlice 将当前值转换为 []string 切片
|
|
StringSlice() []string
|
|
|
|
// IntSlice 将当前值转换为 []int 切片
|
|
IntSlice() []int
|
|
}
|