gstructs

package
v0.0.0-...-2910145 Latest Latest
Warning

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

Go to latest
Published: Feb 14, 2024 License: MIT Imports: 8 Imported by: 0

Documentation

Overview

包gstructs提供了用于获取结构体信息的函数。 这个不翻译了, 这是一个偏底层组件,一般业务上很少会用到,在框架、基础库、中间件编写中用到。

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func FieldMap

func FieldMap(in FieldMapInput) (map[string]Field, error)

FieldMap 从`pointer`获取并返回结构体字段为map[name/tag]Field。

参数`pointer`应为struct/*struct类型。

参数`priority`指定了按从高到低优先级获取的标签数组。如果给出`nil`,则返回map[name]Field,其中`name`是属性名称。

参数`recursive`指定了当属性是一个嵌入式结构体时,是否递归地获取其字段。

注意,它仅从结构体中获取首字母大写的导出属性(即公开属性)。

func ParseTag

func ParseTag(tag string) map[string]string

ParseTag函数用于解析标签字符串并转换为映射(map)。 例如: ParseTag(`v:"required" p:"id" d:"1"`) => map[v:required p:id d:1].

func TagMapField

func TagMapField(object interface{}, priority []string) (map[string]Field, error)

TagMapField 从`pointer`中获取结构体标签并以map[tag]Field的形式返回。参数`object`应为struct/*struct/[]struct/[]*struct类型。

注意: 1. 它只检索结构体中首字母大写的导出属性(即公开字段)。 2. 参数`priority`必须给出,它只检索具有该给定标签的字段。 3. 如果某个字段没有指定标签,则使用其字段名称作为结果映射键。

func TagMapName

func TagMapName(pointer interface{}, priority []string) (map[string]string, error)

TagMapName 从`pointer`中获取并返回以map[tag]attribute形式的结构体标签。

参数`pointer`应为struct或*struct类型。

注意: 1. 它只从结构体中获取首字母大写的导出属性。 2. 应提供参数`priority`,它只检索具有给定标签的字段。 3. 如果某个字段没有指定标签,则使用其字段名作为结果映射键。

Types

type Field

type Field struct {
	Value reflect.Value       // 字段的底层值
	Field reflect.StructField // 字段的底层字段。

	// 获取到的标签名称,其依赖于TagValue。
	TagName string

	// 获取到的标签值。
	// 在该字段中可能包含多个标签,
	// 但根据调用函数规则,只能获取其中一个。
	TagValue string
}

Field 包含结构体字段的信息。

func Fields

func Fields(in FieldsInput) ([]Field, error)

Fields 函数检索并返回 `pointer` 的字段作为一个切片。

func TagFields

func TagFields(pointer interface{}, priority []string) ([]Field, error)

TagFields 从`pointer`中获取并返回以[]Field形式的结构体标签。

参数`pointer`应为struct或*struct类型。

注意: 1. 它仅从结构体中获取首字母大写的导出属性(即公开字段)。 2. 参数`priority`应提供,它只检索具有给定标签的字段。

func (*Field) IsEmbedded

func (f *Field) IsEmbedded() bool

IsEmbedded 返回 true 如果给定的字段是一个匿名字段(嵌入式)

func (*Field) IsEmpty

func (f *Field) IsEmpty() bool

IsEmpty 检查并返回该 Field 的值是否为空。

func (*Field) IsExported

func (f *Field) IsExported() bool

IsExported 返回 true 如果给定的字段是导出的。

func (*Field) Kind

func (f *Field) Kind() reflect.Kind

Kind 返回Field `f`值的reflect.Kind。

func (*Field) Name

func (f *Field) Name() string

Name 返回给定字段的名称。

func (*Field) OriginalKind

func (f *Field) OriginalKind() reflect.Kind

OriginalKind 从Field `f`的Value中获取并返回其原始的 reflect.Kind 类型。

func (*Field) Tag

func (f *Field) Tag(key string) string

Tag 函数返回在标签字符串中与 key 关联的值。如果该标签中不存在相应的 key,则 Tag 函数返回空字符串。

func (*Field) TagAdditional

func (f *Field) TagAdditional() string

TagAdditional 返回该字段最常用的标签 "additional/ad" 的值。

func (*Field) TagDefault

func (f *Field) TagDefault() string

TagDefault 返回该字段最常用的标签 `default/d` 的值。

func (*Field) TagDescription

func (f *Field) TagDescription() string

TagDescription 返回字段中最常用的标签 `description/des/dc` 的值。

func (*Field) TagExample

func (f *Field) TagExample() string

TagExample 返回该字段最常用的标签 `example/eg` 的值。

func (*Field) TagIn

func (f *Field) TagIn() string

TagIn 返回该字段最常用的标签 "in" 值。

func (*Field) TagJsonName

func (f *Field) TagJsonName() string

TagJsonName 返回该字段的 `json` 标签名称字符串。

func (*Field) TagLookup

func (f *Field) TagLookup(key string) (value string, ok bool)

TagLookup在tag字符串中查找与key关联的值。 如果key在tag中存在,返回对应的值(可能为空)。 否则,返回值将是空字符串。 ok返回值报告该值是否在tag字符串中显式设置。如果tag不具有常规格式, Lookup返回的值未指定。

func (*Field) TagMap

func (f *Field) TagMap() map[string]string

TagMap 返回该字段的所有标签及其对应的值字符串,以映射(map)形式表示。

func (*Field) TagParam

func (f *Field) TagParam() string

TagParam 返回该字段最常用的标签 `param/p` 的值。

func (*Field) TagStr

func (f *Field) TagStr() string

TagStr 返回该字段的标签字符串。

func (*Field) TagSummary

func (f *Field) TagSummary() string

TagSummary 返回该字段使用最频繁的标签值,标签键为 `summary`、`sum` 或 `sm`。

func (*Field) TagValid

func (f *Field) TagValid() string

TagValid 返回该字段最常用的标签 `valid/v` 的值。

func (*Field) Type

func (f *Field) Type() Type

Type 返回给定字段的类型。 注意,此处的 Type 并非 reflect.Type。如果你需要 reflect.Type,请使用 Field.Type().Type。

func (*Field) X是否为Nil

func (f *Field) X是否为Nil(traceSource ...bool) bool

IsNil 检查并返回该 Field 的值是否为 nil。

type FieldMapInput

type FieldMapInput struct {
	// Pointer 应为结构体类型。/*struct. */
	// TODO 这个属性名称不合适,可能会引起混淆。
	Pointer interface{}

	// PriorityTagArray 指定从高到低检索的优先级标签数组。
	// 如果传入 `nil`,则返回 map[name]Field,其中 `name` 是属性名。
	PriorityTagArray []string

	// RecursiveOption 指定当属性是一个嵌入式结构体时,以何种方式递归获取其字段。默认情况下,其值为 RecursiveOptionNone。
	// “`go
	// RecursiveOption 指定了在遇到嵌入式结构体属性时,如何进行递归地获取其字段的选项。默认设置为 RecursiveOptionNone。
	RecursiveOption RecursiveOption
}

FieldMapInput 是函数 FieldMap 的输入参数结构体类型。

type FieldsInput

type FieldsInput struct {
	// Pointer 应为结构体类型。/*struct. */
	// TODO 这个属性名称不合适,可能会引起混淆。
	Pointer interface{}

	// RecursiveOption 指定当属性是一个嵌入式结构体时,以何种方式递归获取其字段。默认情况下,其值为 RecursiveOptionNone。
	// “`go
	// RecursiveOption 指定了在遇到嵌入式结构体属性时,如何进行递归地获取其字段的选项。默认设置为 RecursiveOptionNone。
	RecursiveOption RecursiveOption
}

FieldsInput 是函数 Fields 的输入参数结构体类型。

type RecursiveOption

type RecursiveOption int
const (
	RecursiveOptionNone          RecursiveOption = 0 // 如果字段是嵌入式结构体,则不递归地以 map 形式获取其字段。
	RecursiveOptionEmbedded      RecursiveOption = 1 // 如果字段是一个嵌入式结构体,则递归地将其字段作为映射获取。
	RecursiveOptionEmbeddedNoTag RecursiveOption = 2 // 如果字段是一个嵌入式结构体且该字段没有标签,则递归获取其字段并以映射形式返回。
)

type Type

type Type struct {
	reflect.Type
}

Type 类型封装了 reflect.Type,提供了额外的功能。

func StructType

func StructType(object interface{}) (*Type, error)

StructType 函数检索并返回指定结构体的结构体类型。 参数 `object` 应为 struct 类型、指针到 struct 类型、struct 切片或指针到 struct 切片类型。

func (Type) FieldKeys

func (t Type) FieldKeys() []string

FieldKeys 返回当前结构体或映射的键。

func (Type) Signature

func (t Type) Signature() string

Signature 返回此类型的唯一字符串。

Jump to

Keyboard shortcuts

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