Documentation
¶
Overview ¶
Package reflectx 实现了对标准 reflect 库的扩展,适用于实现序列化和 反序列化包。主要的 Mapper 类型支持兼容 Go 风格的命名属性访问,包括 访问嵌入结构体属性的能力,以及使用函数和结构体标签来自定义字段名称。
Index ¶
- func Deref(t reflect.Type) reflect.Type
- func FieldByIndexes(v reflect.Value, indexes []int) reflect.Value
- func FieldByIndexesReadOnly(v reflect.Value, indexes []int) reflect.Value
- type FieldInfo
- type Mapper
- func (m *Mapper) FieldByName(v reflect.Value, name string) reflect.Value
- func (m *Mapper) FieldMap(v reflect.Value) map[string]reflect.Value
- func (m *Mapper) FieldsByName(v reflect.Value, names []string) []reflect.Value
- func (m *Mapper) TraversalsByName(t reflect.Type, names []string) [][]int
- func (m *Mapper) TraversalsByNameFunc(t reflect.Type, names []string, fn func(int, []int) error) error
- func (m *Mapper) TypeMap(t reflect.Type) *StructMap
- type StructMap
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func FieldByIndexes ¶
FieldByIndexes 返回给定值的结构体遍历路径对应的字段值。
Types ¶
type FieldInfo ¶
type FieldInfo struct {
Index []int
Path string
Field reflect.StructField
Zero reflect.Value
Name string
Options map[string]string
Embedded bool
Children []*FieldInfo
Parent *FieldInfo
}
FieldInfo 是结构体字段的元数据。
type Mapper ¶
type Mapper struct {
// contains filtered or unexported fields
}
Mapper 是一个通用的名称到结构体字段的映射器。Mapper 的行为类似于 标准库中的大多数序列化器,遵循字段标签进行名称映射,同时也提供 基本的转换函数。
func NewMapperFunc ¶
NewMapperFunc 返回一个新的 Mapper,可选择性地遵循字段标签和由 f 给定的 结构体字段名映射函数。标签将优先使用,但对于其他字段,映射后的名称将是 f(field.Name)。
func NewMapperTagColFunc ¶
func NewMapperTagColFunc(tagName string, mapFunc, tagMapFunc, colMapFunc func(string) string) *Mapper
NewMapperTagColFunc 返回一个新的 Mapper,包含字段名映射器、标签值映射器 以及 SQL 列名映射器。colMapFunc 在按列名解析字段前先对列名做归一化, 适用于列大小写不一致的数据库(如 SQLite)。
func NewMapperTagFunc ¶
NewMapperTagFunc 返回一个新的 Mapper,其中包含字段名称映射器和标签值映射器。 这对于像 json 这样可以在标签中包含 "name,omitempty" 等值的标签非常有用。
func (*Mapper) FieldByName ¶
FieldByName 根据字段的映射名称返回 reflect.Value。 如果 v 的 Kind 不是 Struct,或者 v 不可间接寻址到结构体类型,则 panic。 如果未找到该名称,返回零值 Value。
func (*Mapper) FieldMap ¶
FieldMap 返回 Mapper 对字段名到 reflect.Value 的映射。 如果 v 的 Kind 不是 Struct,或者 v 不可间接寻址到结构体类型,则 panic。
func (*Mapper) FieldsByName ¶
FieldsByName 返回与名称切片对应的 Value 切片。 如果 v 的 Kind 不是 Struct,或者 v 不可间接寻址到结构体类型,则 panic。 对于每个未找到的名称,返回零值 Value。
func (*Mapper) TraversalsByName ¶
TraversalsByName 返回一个 int 切片切片,表示每个映射名称的结构体遍历路径。 如果 t 不是结构体或不可间接寻址到结构体,则 panic。 对于每个未找到的名称,返回空的 int 切片。
type StructMap ¶
type StructMap struct {
Tree *FieldInfo
Index []*FieldInfo
Paths map[string]*FieldInfo
Names map[string]*FieldInfo
Leafs map[string][]*FieldInfo
}
StructMap 是结构体字段元数据的索引。
func (StructMap) GetByTraversal ¶
GetByTraversal 根据给定的整数路径返回 *FieldInfo。它类似于 reflect.FieldByIndex,但使用缓存的遍历路径,而不是每次重新执行 reflect 机制。