reflectx

package
v1.3.3 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 28, 2021 License: Apache-2.0 Imports: 4 Imported by: 1

Documentation

Overview

软件包 reflects 实现了对标准反射库的扩展,适用于实现编组和解组软件包。

主要的Mapper类型允许Go兼容的命名属性访问,包括访问嵌入的struct属性以及使用函数和struct标记来自定义字段名称的能力。

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func FieldByIndexes

func FieldByIndexes(v reflect.Value, indexes []int) reflect.Value

FieldByIndexes 为给定值返回结构遍历所给定字段的值。

func FieldByIndexesReadOnly

func FieldByIndexesReadOnly(v reflect.Value, indexes []int) reflect.Value

FieldByIndexesReadOnly 返回用于特定结构遍历的值,但与分配nil指针无关,因为该值将用于读取而不是设置。

func Indirect

func Indirect(t reflect.Type) reflect.Type

Indirect (原Deref) 对于reflect.Types是间接的

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 是结构体字段的元数据。是对 reflect.StructField 的扩展。

type Mapper

type Mapper struct {
	// contains filtered or unexported fields
}

Mapper 是名称到结构字段的通用映射器。

映射器的行为类似于标准库中的大多数编组器,它遵循用于名称映射的字段标签,但也提供了基本的转换功能。

func NewMapper

func NewMapper(tagName string) *Mapper

NewMapper 使用tagName作为其结构字段标签返回一个新的映射器。如果tagName是空字符串,则将其忽略。

func NewMapperFunc

func NewMapperFunc(tagName string, f func(string) string) *Mapper

NewMapperFunc 返回一个新的映射器,该映射器可以选择服从f给出的字段标签和结构字段名称映射器func。

标签将优先,但是对于任何其他字段,映射的名称将为f(field.Name)

func NewMapperTagFunc

func NewMapperTagFunc(tagName string, mapFunc, tagMapFunc func(string) string) *Mapper

NewMapperTagFunc 返回一个新的映射器,其中包含用于字段名称的映射器和用于标记值的映射器。

这对于像json这样的标签很有用,该标签可以具有“ name,omitempty”之类的值。

func (*Mapper) FieldByName

func (m *Mapper) FieldByName(v reflect.Value, name string) reflect.Value

FieldByName 通过其映射名称返回字段,即 reflect.Value。

如果v的Kind不是Struct或v不可间接访问结构Kind,则感到恐慌。如果找不到名称,则返回零值。

func (*Mapper) FieldMap

func (m *Mapper) FieldMap(v reflect.Value) map[string]reflect.Value

FieldMap 返回映射器的字段名称映射到 reflect.Value.

如果v的Kind不是Struct或v不可间接访问结构种类,则发生恐慌。

func (*Mapper) FieldsByName

func (m *Mapper) FieldsByName(v reflect.Value, names []string) []reflect.Value

FieldsByName 返回与值的名称切片相对应的值切片。

如果v的Kind不是Struct或v不可间接访问结构Kind,则感到恐慌。对于找不到的每个名称,返回零值。

func (*Mapper) TraversalsByName

func (m *Mapper) TraversalsByName(t reflect.Type, names []string) [][]int

TraversalsByName 返回一个int slices的切片,该切片代表每个映射名称的结构遍历。

如果t不是一个结构或该结构不是可间接访问的,则感到恐慌。对于找不到的每个名称,返回空的int切片。

func (*Mapper) TraversalsByNameFunc

func (m *Mapper) TraversalsByNameFunc(t reflect.Type, names []string, fn func(int, []int) error) error

TraversalsByNameFunc 遍历映射的名称,并使用每个名称的索引和该名称表示的结构遍历调用fn。

如果t不是一个结构或该结构不是可间接访问的,则感到恐慌。返回fn或nil返回的第一个错误。

func (*Mapper) TypeMap

func (m *Mapper) TypeMap(t reflect.Type) *StructMap

TypeMap 返回字段字符串到int切片的映射,这些切片代表遍历结构到达该字段的遍历。

type StructMap

type StructMap struct {
	Tree  *FieldInfo
	Index []*FieldInfo
	Paths map[string]*FieldInfo
	Names map[string]*FieldInfo
}

StructMap 是结构体的字段元数据的索引。

func (StructMap) GetByPath

func (f StructMap) GetByPath(path string) *FieldInfo

GetByPath 返回给定字符串路径的 FieldInfo

func (StructMap) GetByTraversal

func (f StructMap) GetByTraversal(index []int) *FieldInfo

GetByTraversal 返回给定整数路径的FieldInfo。

它类似于 reflect.FieldByIndex 但是使用缓存的遍历而不是每次都重新执行反射机制。

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL