- 新增 Lookuper 接口,提供 Lookup 和 MustLookup 两种路径查找方式 - Accessor 接口继承 Lookuper,保持向后兼容 - MustLookup 在路径不存在时返回 Nil 访问器,简化调用代码 - 更新 fieldx.Schema 使用 Lookuper 接口,支持更灵活的数据源 - 添加 Required 字段选项,控制字段不存在时的行为
155 lines
2.6 KiB
Go
155 lines
2.6 KiB
Go
package valuex
|
|
|
|
import "reflect"
|
|
|
|
// nilAccessor 是一个空实现,用于表示不存在或空值的访问器
|
|
// 所有转换方法都会返回对应类型的零值
|
|
type nilAccessor struct{}
|
|
|
|
// Nil 为全局唯一的 nilAccessor 实例
|
|
var Nil = &nilAccessor{}
|
|
|
|
// Lookup 总是返回自身和 false,表示路径不存在
|
|
func (n *nilAccessor) Lookup(path string) (Accessor, bool) {
|
|
return n, false
|
|
}
|
|
|
|
// MustLookup 总是返回自身,表示路径不存在
|
|
func (n *nilAccessor) MustLookup(path string) Accessor {
|
|
return n
|
|
}
|
|
|
|
func (n *nilAccessor) Raw() reflect.Value {
|
|
return reflect.Value{}
|
|
}
|
|
|
|
// Ptr 返回 nil
|
|
func (n *nilAccessor) Ptr() any {
|
|
return nil
|
|
}
|
|
|
|
// Any 返回 nil
|
|
func (n *nilAccessor) Any() any {
|
|
return nil
|
|
}
|
|
|
|
// Bool 返回 false
|
|
func (n *nilAccessor) Bool() bool {
|
|
return false
|
|
}
|
|
|
|
// Float64 返回 0
|
|
func (n *nilAccessor) Float64() float64 {
|
|
return 0
|
|
}
|
|
|
|
// Float32 返回 0
|
|
func (n *nilAccessor) Float32() float32 {
|
|
return 0
|
|
}
|
|
|
|
// Int64 返回 0
|
|
func (n *nilAccessor) Int64() int64 {
|
|
return 0
|
|
}
|
|
|
|
// Int32 返回 0
|
|
func (n *nilAccessor) Int32() int32 {
|
|
return 0
|
|
}
|
|
|
|
// Int16 返回 0
|
|
func (n *nilAccessor) Int16() int16 {
|
|
return 0
|
|
}
|
|
|
|
// Int8 返回 0
|
|
func (n *nilAccessor) Int8() int8 {
|
|
return 0
|
|
}
|
|
|
|
// Int 返回 0
|
|
func (n *nilAccessor) Int() int {
|
|
return 0
|
|
}
|
|
|
|
// Uint 返回 0
|
|
func (n *nilAccessor) Uint() uint {
|
|
return 0
|
|
}
|
|
|
|
// Uint64 返回 0
|
|
func (n *nilAccessor) Uint64() uint64 {
|
|
return 0
|
|
}
|
|
|
|
// Uint32 返回 0
|
|
func (n *nilAccessor) Uint32() uint32 {
|
|
return 0
|
|
}
|
|
|
|
// Uint16 返回 0
|
|
func (n *nilAccessor) Uint16() uint16 {
|
|
return 0
|
|
}
|
|
|
|
// Uint8 返回 0
|
|
func (n *nilAccessor) Uint8() uint8 {
|
|
return 0
|
|
}
|
|
|
|
// String 返回空字符串
|
|
func (n *nilAccessor) String() string {
|
|
return ""
|
|
}
|
|
|
|
// StringMapString 返回 nil
|
|
func (n *nilAccessor) StringMapString() map[string]string {
|
|
return nil
|
|
}
|
|
|
|
// StringMapStringSlice 返回 nil
|
|
func (n *nilAccessor) StringMapStringSlice() map[string][]string {
|
|
return nil
|
|
}
|
|
|
|
// StringMapBool 返回 nil
|
|
func (n *nilAccessor) StringMapBool() map[string]bool {
|
|
return nil
|
|
}
|
|
|
|
// StringMapInt 返回 nil
|
|
func (n *nilAccessor) StringMapInt() map[string]int {
|
|
return nil
|
|
}
|
|
|
|
// StringMapInt64 返回 nil
|
|
func (n *nilAccessor) StringMapInt64() map[string]int64 {
|
|
return nil
|
|
}
|
|
|
|
// StringMap 返回 nil
|
|
func (n *nilAccessor) StringMap() map[string]any {
|
|
return nil
|
|
}
|
|
|
|
// Slice 返回 nil
|
|
func (n *nilAccessor) Slice() []any {
|
|
return nil
|
|
}
|
|
|
|
// BoolSlice 返回 nil
|
|
func (n *nilAccessor) BoolSlice() []bool {
|
|
return nil
|
|
}
|
|
|
|
// StringSlice 返回 nil
|
|
func (n *nilAccessor) StringSlice() []string {
|
|
return nil
|
|
}
|
|
|
|
// IntSlice 返回 nil
|
|
func (n *nilAccessor) IntSlice() []int {
|
|
return nil
|
|
}
|