转换类

package
v0.0.0-...-fcd50c7 Latest Latest
Warning

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

Go to latest
Published: Aug 21, 2024 License: MIT Imports: 20 Imported by: 0

Documentation

Overview

包gconv实现了对任何类型变量的强大而便捷的转换功能。

此包应尽量减少与其他包的依赖关系。 md5:b18f07aca2be5125

Index

Constants

This section is empty.

Variables

View Source
var (

	// StructTagPriority 定义了Map*/Struct*函数的默认优先级标签。
	// 注意,`gconv/param` 标签由旧版本的包使用。强烈建议未来改用简短的标签 `c/p`。
	// md5:c4b7d2fe8905ed52
	StructTagPriority = gtag.StructTagPriority
)

Functions

func MapToMap

func MapToMap(params interface{}, pointer interface{}, mapping ...map[string]string) error

MapToMap 通过反射将任何map类型变量`params`转换为另一个map类型变量`pointer`。 参考 doMapToMap。 md5:8fbdb048d4cad524

func MapToMaps

func MapToMaps(params interface{}, pointer interface{}, mapping ...map[string]string) error

MapToMaps 将任何切片类型变量 `params` 转换为另一个映射切片类型变量 `pointer`。 参见 doMapToMaps。 md5:70b6d6cf0e63da31

func Scan

func Scan(srcValue interface{}, dstPointer interface{}, paramKeyToAttrMap ...map[string]string) (err error)

Scan 自动检查`pointer`的类型,并将`params`转换为`pointer`。 它支持以下类型的`pointer`进行转换:`*map/*[]map/*[]*map/*struct/**struct/*[]struct/*[]*struct`。

待办:将`paramKeyToAttrMap`改为`ScanOption`以提高可扩展性;为`ScanOption`添加`DeepCopy`选项。 md5:6b1a82a906dd8ec9

func ScanList

func ScanList(structSlice interface{}, structSlicePointer interface{}, bindToAttrName string, relationAttrNameAndFields ...string) (err error)

ScanList将`structSlice`转换为包含其他复杂结构体属性的结构体切片。 注意,参数`structSlicePointer`的类型应为*[]struct/*[]*struct。

使用示例1:普通属性结构关系:

type EntityUser struct {
    Uid  int
    Name string
}

type EntityUserDetail struct {
    Uid     int
    Address string
}

type EntityUserScores struct {
    Id     int
    Uid    int
    Score  int
    Course string
}

type Entity struct {
    User       *EntityUser
    UserDetail *EntityUserDetail
    UserScores []*EntityUserScores
}

var users []*Entity
var userRecords   = EntityUser{Uid: 1, Name:"john"}
var detailRecords = EntityUser{Uid: 1, Address: "chengdu"}
var scoresRecords = EntityUser{Id: 1, Uid: 1, Score: 100, Course: "math"}
ScanList(userRecords, &users, "User")
ScanList(userRecords, &users, "User", "uid")
ScanList(detailRecords, &users, "UserDetail", "User", "uid:Uid")
ScanList(scoresRecords, &users, "UserScores", "User", "uid:Uid")
ScanList(scoresRecords, &users, "UserScores", "User", "uid")

使用示例2:嵌入属性结构关系:

type EntityUser struct {
	   Uid  int
	   Name string
}

type EntityUserDetail struct {
	   Uid     int
	   Address string
}

type EntityUserScores struct {
	   Id    int
	   Uid   int
	   Score int
}

type Entity struct {
	   EntityUser
	   UserDetail EntityUserDetail
	   UserScores []EntityUserScores
}

var userRecords   = EntityUser{Uid: 1, Name:"john"}
var detailRecords = EntityUser{Uid: 1, Address: "chengdu"}
var scoresRecords = EntityUser{Id: 1, Uid: 1, Score: 100, Course: "math"}
ScanList(userRecords, &users)
ScanList(detailRecords, &users, "UserDetail", "uid")
ScanList(scoresRecords, &users, "UserScores", "uid")

示例代码中的"User/UserDetail/UserScores"指定当前结果将绑定的目标属性结构。

示例代码中的"uid"是结果的表字段名,而"Uid"是相关结构体属性名,而不是绑定到目标的属性名。在示例代码中,它是实体"Entity"的"User"属性的"Uid"属性名称。它会根据给定的`relation`参数自动计算HasOne/HasMany关系。

参考示例或单元测试用例以更清楚地理解此函数的工作原理。 md5:1e63a3d19a1b0060

func SliceAny别名

func SliceAny别名(值 interface{}) []interface{}

SliceAny别名 是 Interfaces 的别名。 md5:4a67bb7703f4770e

func SliceFloat32别名

func SliceFloat32别名(any interface{}) []float32

SliceFloat32别名 是 Float32s 的别名。 md5:686d576236624be0

func SliceFloat64别名

func SliceFloat64别名(any interface{}) []float64

SliceFloat64别名 是 Float64s 的别名。 md5:8fe51e4f2e2255df

func SliceFloat别名

func SliceFloat别名(any interface{}) []float64

SliceFloat别名是Floats的别名。 md5:d770be8332715271

func SliceIet32别名

func SliceIet32别名(any interface{}) []int32

SliceIet32别名 是 Int32s 的别名。 md5:ea50c4495697e1ad

func SliceIne别名

func SliceIne别名(any interface{}) []int

SliceIne别名 是 Ints 的别名。 md5:1918d6b770b537c7

func SliceInt64别名

func SliceInt64别名(any interface{}) []int64

SliceInt64别名 是 Int64s 的别名。 md5:c8c6a11351f3c7dc

func SliceMapDeep别名

func SliceMapDeep别名(any interface{}) []map[string]interface{}

SliceMapDeep别名 是 MapsDeep 的别名。 不推荐使用:请改用 SliceMap。 md5:e577a1254364096d

func SliceMap别名

func SliceMap别名(值 interface{}, option ...MapOption) []map[string]interface{}

SliceMap别名 是 Maps 的别名。 md5:af436f87335633ac

func SliceStruct别名

func SliceStruct别名(params interface{}, pointer interface{}, mapping ...map[string]string) (err error)

SliceStruct别名 是 Structs 的别名。 md5:844cd0606fb4edf0

func SliceStr别名

func SliceStr别名(any interface{}) []string

SliceStr别名是Strings的别名。 md5:dacb4ebc45c023cf

func SliceUint32别名

func SliceUint32别名(any interface{}) []uint32

SliceUint32别名是Uint32s的别名。 md5:128b14c8ffd2f906

func SliceUint64别名

func SliceUint64别名(any interface{}) []uint64

SliceUint64别名 是 Uint64s 的别名。 md5:8436f35c37880e8c

func SliceUint别名

func SliceUint别名(any interface{}) []uint

SliceUint别名是Uints的别名。 md5:75cea5e3f6b32ecb

func String

func String(any interface{}) string

String 将 `any` 转换为字符串。它是最常用的转换函数。 md5:722d0704c061781b

func Struct

func Struct(params interface{}, pointer interface{}, paramKeyToAttrMap ...map[string]string) (err error)

结构体将参数的键值对映射到对应结构对象的属性。 第三个参数 `mapping` 不必要,表示自定义键名和属性名之间的映射规则(区分大小写)。

注意: 1. `params` 可以是任何类型的 map/struct,通常为 map。 2. `pointer` 应该是 *struct/**struct 类型,即指向结构体对象或结构体指针。 3. 只有结构体对象的公共属性可以被映射。 4. 如果 `params` 是一个 map,其键 `params` 可以是小写。在映射过程中,它会自动将键的首字母转换为大写进行匹配。如果键不匹配,它将忽略该键。 md5:b39a46da903b06f5

func StructTag

func StructTag(params interface{}, pointer interface{}, priorityTag string) (err error)

StructTag 作为 Struct 的功能,但同时也支持优先级标签特性。这个特性用于获取 `params` 键值对中的指定标签,并将其映射到结构体属性名上。 参数 `priorityTag` 支持多个标签,这些标签之间可以使用逗号 `,` 进行连接。 md5:14d47a8c22737303

func Structs

func Structs(params interface{}, pointer interface{}, paramKeyToAttrMap ...map[string]string) (err error)

Structs 将任何切片转换为给定结构体类型的切片。 另请参见 Scan, Struct。 md5:9f4251433eeb586c

func StructsTag

func StructsTag(params interface{}, pointer interface{}, priorityTag string) (err error)

StructsTag 作为 Structs 的功能增强版本,还支持优先级标签特性。它根据 `params` 键值对获取指定的标签,并将其映射到结构体属性名称上。 参数 `priorityTag` 支持多个标签,这些标签可以使用逗号分隔。 md5:ddc344beca5956a8

func X取Map

func X取Map(值 interface{}, 选项 ...MapOption) map[string]interface{}

X取Map 将任何变量 `value` 转换为 map[string]interface{}。如果参数 `value` 不是 类型为 map/struct/*struct,转换将会失败并返回 nil。

如果 `value` 是一个 struct/*struct 对象,第二个参数 `tags` 指定了具有最高优先级的 将被检测的标签,否则它会按照以下顺序检测标签: gconv, json, 字段名称。 md5:34498665a6393f82

func X取Map_递归

func X取Map_递归(值 interface{}, 值标签 ...string) map[string]interface{}

X取Map_递归递归地执行Map函数,这意味着如果`value`的属性也是一个`struct/*struct`,则会在这个属性上调用Map函数,并将其转换为map[string]interface{}类型的变量。 警告:建议使用Map替代。 md5:dc0620a4d15b4389

func X取Map数组

func X取Map数组(值 interface{}, 选项 ...MapOption) []map[string]interface{}

X取Map数组 将 `value` 转换为 []map[string]interface{} 类型。 注意,如果 `value` 是字符串或[]byte类型,它会自动检查并转换为json字符串到 []map。 md5:cff297515bb58eac

func X取Map数组_递归

func X取Map数组_递归(值 interface{}, 值标签 ...string) []map[string]interface{}

X取Map数组_递归 将 `value` 递归地转换为 []map[string]interface{} 类型。

TODO:完全实现所有类型的递归转换。 已弃用:推荐使用 Maps 替代。 md5:4fca16e80380d63d

func X取any指针

func X取any指针(值 interface{}) *interface{}

X取any指针 创建并返回一个指向此值的interface{}指针变量。 md5:12130f8892007df6

func X取any数组

func X取any数组(any interface{}) []interface{}

X取any数组 将 `any` 转换为 []interface{}。 md5:74035d098fdf06f6

func X取gtime时间类

func X取gtime时间类(any interface{}, format ...string) *gtime.Time

X取gtime时间类 将 `any` 转换为 *gtime.Time。 参数 `format` 可用于指定 `any` 的格式。 它返回与格式切片中第一个格式匹配的转换值。 如果没有提供 `format`,则当 `any` 为数字时使用 gtime.NewFromTimeStamp 进行转换, 或者当 `any` 为字符串时使用 gtime.StrToTime 进行转换。 md5:a1c7656c4b134443

func X取字符

func X取字符(值 interface{}) rune

X取字符 将 `any` 转换为 rune。 md5:3459f7528861cc23

func X取字符数组

func X取字符数组(值 interface{}) []rune

X取字符数组将`any`转换为[]rune。 md5:25552cd961d1d6bb

func X取字节

func X取字节(值 interface{}) byte

X取字节将`any`转换为byte。 md5:aeef919e3fba4f95

func X取字节集

func X取字节集(any interface{}) []byte

X取字节集 将 `any` 转换为 []byte。 md5:06125d6ba5f449a5

func X取小数32位

func X取小数32位(any interface{}) float32

X取小数32位 将 `any` 转换为 float32 类型。 md5:ae355a911909e343

func X取小数32位指针

func X取小数32位指针(值 interface{}) *float32

X取小数32位指针 创建并返回一个指向此值的 float32 指针变量。 md5:3ccf785d35432892

func X取小数32位数组

func X取小数32位数组(值 interface{}) []float32

X取小数32位数组 将 `any` 转换为 []float32。 md5:e1b7a8e84a68d538

func X取小数64位

func X取小数64位(any interface{}) float64

X取小数64位 将 `any` 转换为 float64 类型。 md5:c0bd7cb237571bff

func X取小数64位指针

func X取小数64位指针(值 interface{}) *float64

X取小数64位指针 创建并返回一个指向此值的float64指针变量。 md5:4ce193832d7c216e

func X取小数64位数组

func X取小数64位数组(值 interface{}) []float64

X取小数64位数组 将 `any` 转换为 []float64。 md5:f66a670e62a3b46e

func X取小数数组

func X取小数数组(any interface{}) []float64

X取小数数组 将 `any` 转换为 []float64。 md5:888b7822b64d033c

func X取布尔

func X取布尔(any interface{}) bool

X取布尔 将 `any` 转换为布尔值。 如果 `any` 是:false,"",0,"false","off","no",空切片/映射,则返回 false。 md5:b9d150a8798a274a

func X取布尔指针

func X取布尔指针(值 interface{}) *bool

X取布尔指针 创建并返回一个指向此值的布尔型指针变量。 md5:662b2b040324119f

func X取整数

func X取整数(值 interface{}) int

X取整数 将 `any` 转换为整数。 md5:7d14e0d4caedf28f

func X取整数16位

func X取整数16位(值 interface{}) int16

X取整数16位 将 `any` 转换为 int16。 md5:5acb21515934f62d

func X取整数16位指针

func X取整数16位指针(值 interface{}) *int16

X取整数16位指针 创建并返回一个指向此值的 int16 指针变量。 md5:f1ea6c718962fd2e

func X取整数32位

func X取整数32位(值 interface{}) int32

X取整数32位 将 `any` 转换为 int32 类型。 md5:87b6a70499ffaf8a

func X取整数32位指针

func X取整数32位指针(值 interface{}) *int32

X取整数32位指针 创建并返回一个指向此值的int32指针变量。 md5:7f7072cdeb72f52a

func X取整数32位数组

func X取整数32位数组(值 interface{}) []int32

X取整数32位数组 将 `any` 转换为 []int32。 md5:3b96167e68fc609e

func X取整数64位

func X取整数64位(any interface{}) int64

X取整数64位 将 `any` 转换为 int64 类型。 md5:e95a0233b73ea496

func X取整数64位指针

func X取整数64位指针(值 interface{}) *int64

X取整数64位指针 创建并返回一个指向该值的int64指针变量。 md5:60417c5b51562e51

func X取整数64位数组

func X取整数64位数组(值 interface{}) []int64

X取整数64位数组 将 `any` 转换为 []int64。 md5:c28e69b40a68187f

func X取整数8位

func X取整数8位(值 interface{}) int8

X取整数8位 将 `any` 类型转换为 int8。 md5:3a0a5e4022ab71df

func X取整数8位指针

func X取整数8位指针(值 interface{}) *int8

X取整数8位指针 创建并返回一个指向此值的 int8 指针变量。 md5:135a8560671f447d

func X取整数指针

func X取整数指针(值 interface{}) *int

X取整数指针 创建并返回一个指向该值的int指针变量。 md5:aac4fd8dc5360539

func X取整数数组

func X取整数数组(any interface{}) []int

X取整数数组 将 `any` 类型转换为 []int 类型。 md5:2e68bd53fc00e307

func X取文本Map

func X取文本Map(值 interface{}, 选项 ...MapOption) map[string]string

X取文本Map 将 `value` 转换为 map[string]string 类型。 注意,对于这种映射类型转换,可能会有数据复制的情况发生。 md5:a1ec9ce0d856cd1e

func X取文本Map_递归

func X取文本Map_递归(值 interface{}, 值标签 ...string) map[string]string

X取文本Map_递归 递归地将`value`转换为map[string]string。 请注意,这种映射类型的转换可能会涉及数据复制。 已弃用:请使用MapStrStr代替。 md5:79528a85e8ff4c82

func X取文本指针

func X取文本指针(值 interface{}) *string

X取文本指针 创建并返回一个指向此值的字符串指针变量。 md5:8a45efa4c90feefd

func X取文本数组

func X取文本数组(any interface{}) []string

X取文本数组 将 `any` 转换为 []string。 md5:cbac28ee26158116

func X取时长

func X取时长(值 interface{}) time.Duration

X取时长 将 `any` 转换为 time.X取时长。 如果 `any` 是字符串,那么它使用 time.ParseDuration 进行转换。 如果 `any` 是数字,那么它将 `any` 作为纳秒来转换。 md5:4328f63b0561b4f4

func X取时间

func X取时间(any interface{}, 格式 ...string) time.Time

X取时间 将 `any` 转换为 time.X取时间 类型。 md5:2e2c448d3d063180

func X取正整数

func X取正整数(值 interface{}) uint

X取正整数 将 `any` 转换为 uint 类型。 md5:0a9e343966117c44

func X取正整数16位

func X取正整数16位(值 interface{}) uint16

X取正整数16位 将 `any` 转换为 uint16。 md5:7763a0b90bd179e4

func X取正整数16位指针

func X取正整数16位指针(值 interface{}) *uint16

X取正整数16位指针 创建并返回一个指向此值的uint16指针变量。 md5:7fcfbf0260f97aa5

func X取正整数32位

func X取正整数32位(值 interface{}) uint32

X取正整数32位 将 `any` 转换为 uint32 类型。 md5:26c3b815ff56d271

func X取正整数32位指针

func X取正整数32位指针(值 interface{}) *uint32

X取正整数32位指针 创建并返回一个指向该值的uint32指针变量。 md5:95c5b9723ded3fd2

func X取正整数32位数组

func X取正整数32位数组(值 interface{}) []uint32

X取正整数32位数组 将 `any` 转换为 []uint32。 md5:7a3545642e764e37

func X取正整数64位

func X取正整数64位(any interface{}) uint64

X取正整数64位 将 `any` 转换为 uint64 类型。 md5:14c7f76fe909ea8e

func X取正整数64位指针

func X取正整数64位指针(值 interface{}) *uint64

X取正整数64位指针 创建并返回一个指向此值的 uint64 类型指针变量。 md5:85c9fc668348f455

func X取正整数64位数组

func X取正整数64位数组(值 interface{}) []uint64

X取正整数64位数组 将 `any` 转换为 []uint64。 md5:08b12c62032337ab

func X取正整数8位

func X取正整数8位(值 interface{}) uint8

X取正整数8位 将 `any` 类型转换为 uint8 类型。 md5:330b11711227c6f3

func X取正整数8位指针

func X取正整数8位指针(值 interface{}) *uint8

X取正整数8位指针 创建并返回一个指向此值的 uint8 指针变量。 md5:c4901dd67ca1d339

func X取正整数指针

func X取正整数指针(值 interface{}) *uint

X取正整数指针 创建并返回一个指向此值的无符号整数指针变量。 md5:04c5b5df0b2baa8e

func X取正整数数组

func X取正整数数组(any interface{}) []uint

X取正整数数组 将 `any` 转换为 []uint。 md5:5be2a9bb94384311

func X字节集到文本_非安全

func X字节集到文本_非安全(字节集 []byte) string

X字节集到文本_非安全 将 []byte 转换为 string,而不进行内存复制。 请注意,如果你确定将来绝不会使用 `b` 变量, 可以使用这个不安全的函数来实现高性能的类型转换。 md5:1d73c9ff996784ae

func X按参考值类型转换

func X按参考值类型转换(值 interface{}, 参考值 interface{}, extraParams ...interface{}) interface{}

X按参考值类型转换 将变量 `fromValue` 转换为由 `referValue` 指定的类型。

可选参数 `extraParams` 用于此转换所需的额外参数。它支持基于类型名称字符串的常见基本类型转换。 md5:0badd37157c72db1

func X按名称转换

func X按名称转换(值 interface{}, 类型名称 string, extraParams ...interface{}) interface{}

X按名称转换 将变量 `fromValue` 转换为类型 `toTypeName`,其中 `toTypeName` 由字符串指定。

可选参数 `extraParams` 用于提供此转换所需的额外参数。 它支持基于类型名称字符串的常见基本类型转换。 md5:e081c8fc6552be4c

func X文本到字节集_非安全

func X文本到字节集_非安全(文本 string) []byte

X文本到字节集_非安全 将字符串转换为 []byte,其间不进行内存复制。 注意,如果您完全确定将来绝不会使用 `s` 变量, 您可以使用这个不安全的函数来实现高性能的类型转换。 md5:2ea7b3663055237b

func X转换器注册

func X转换器注册(fn interface{}) (错误 error)

X转换器注册 用于注册自定义转换器。 必须在使用此自定义转换功能之前进行注册。 建议在进程的启动程序中执行此操作。

注意:

  1. 参数 `fn` 必须定义为模式 `func(T1) (T2, error)`。 它将类型 `T1` 转换为类型 `T2`。
  2. `T1` 不应为指针类型,但 `T2` 应为指针类型。

md5:8fbaa372837e6d8c

Types

type MapOption

type MapOption struct {
	// Deep 标记表示递归地执行 Map 函数,这意味着如果给定转换值的属性也是一个结构体(struct),它会自动对这个属性调用 Map 函数,将其转换为 map[string]interface{} 类型变量。
	// md5:3653359965fb222d
	Deep bool

	// OmitEmpty 忽略具有 json `omitempty` 标签的属性。 md5:ce80b66cfe17a0ba
	OmitEmpty bool

	// Tags 指定了通过结构体标签名转换后的映射键名称。 md5:b08e40ad043d7120
	Tags []string
}

MapOption 定义了映射转换的选项。 md5:8dc53d6fdc486bf8

Jump to

Keyboard shortcuts

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