Categorygithub.com/go-touch/mtype
modulepackage
1.0.6
Repository: https://github.com/go-touch/mtype.git
Documentation: pkg.go.dev

# README

mtype

功能支持

支持类型

// Define const.
const (
	TInt            = "Int"            // 类型: int
	TByte           = "Byte"           // 类型: byte
	TRune           = "Rune"           // 类型: rune
	TFloat64        = "Float64"        // 类型: float64
	TString         = "String"         // 类型: string
	TBool           = "Bool"           // 类型: bool
	TIntSlice       = "IntSlice"       // 类型: []int
	TByteSlice      = "ByteSlice"      // 类型: []byte
	TStringSlice    = "StringSlice "   // 类型: []string
	TAnySlice       = "AnySlice "      // 类型: []interface{}
	TStringMapSlice = "StringMapSlice" // 类型: []map[string]string
	TAnyMapSlice    = "AnyMapSlice"    // 类型: []map[string]interface{}
	TStringMap      = "StringMap"      // 类型: map[string]string
	TAnyMap         = "AnyMap"         // 类型: map[string]interface{}
	TError          = "Error"          // 类型: error
	TNil            = "Nil"            // 类型: nil
	TUnknown        = "unknown"        // 类型: unknown
)
获取类型 (对应上面定义的类型字符串)
func GetType(value interface{}) string
转换成对应类型 参数 src:被转换的类型值 dstType:将要转换的类型(参考上面定义类型)
func ToType(src interface{}, dstType string) interface{}

// 示例:
mtype.ToType("10", mtype.TInt) // 字符串10转换成int
Note: 该方法为底层转换方法, 转化后的值还是以 interface{} 形式返回. 如要实现真正转换, 请参考下面 *mtype.AnyValue

类型转换 使用 *mtype.AnyValue(对于不确定类型interfa{}比较适用)

1. 获取 *mtype.AnyValue. 参数 value: interface{} (即被转换的值, 可传任意类型值)
func Eval(value interface{}) *AnyValue

示例:
any := mtype.Eval(map[string]interface{}{})
2. 返回原值类型(对应上面支持类型, 例如:Int 字符串)
func (av *AnyValue) Type() string
3. 返回原值
func (av *AnyValue) Value() interface{}
4. 返回错误信息
func (av *AnyValue) ToError() error
5. 转成int类型
func (av *AnyValue) ToInt() int
6. 转成byte类型
func (av *AnyValue) ToByte() byte
7. 转成string类型
func (av *AnyValue) ToString() string
8. 转成bool类型
func (av *AnyValue) ToBool() bool
9. 转成map[string]string类型
func (av *AnyValue) ToStringMap() map[string]string
10. 更多方法...
Note: *mtype.AnyValue.Method()
完整调用示例:
intValue := mtype.Eval("10").ToInt()
stringValue := mtype.Eval(10).ToString()
stringMap := mtype.Eval("master": map[string]interface{}{
	"host": "127.0.0.1",
	"port": "3306",
}).ToStringMap()

内置类型 mtype.AnyMap

1. 使用方法
第一种方法:
anyMap := mtype.AnyMap{
	"xxx":"xxx",
}

第二种方法:
anyMap := mtype.AnyMap(map[string]interface{}{
	"xxx": "xxx",
})
anyMap的数据结构如下(使用json演示):
{
	"database": {
		"master": {
			"host": "127.0.0.1",
			"port": "3306"
		},
		"salve": {
			"host": "127.0.0.1",
			"port": "3307"
		}
	}
}
2. 查询字段值 参数 args: 任意 . 拼接字符串 (为空则返回 value = 自身值的 *AnyValue)
func (am *AnyMap) Get(args ...string) *AnyValue
调用示例:
v := anyMap.Get("database.master.port")
fmt.Println(v.ToString()) // 输出 3306

v := anyMap.Get()
fmt.Println(v.ToAnyMap()) // 输出 map[database:map[master:map[host:127.0.0.1 port:3306] salve:map[host:127.0.0.1 port:3307]]]
3. 插入或更新字段值 参数 args: 任意 . 拼接字符串 value: 要插入或更新的值
func (am *AnyMap) Set(args string, value interface{})
调用示例:
anyMap.Set("database.master.port",3389)
v := anyMap.Get("database.master.port")
fmt.Println(v.ToString()) // 输出 3389

v := anyMap.Get()
fmt.Println(v.ToAnyMap()) // 输出 map[database:map[master:map[host:127.0.0.1 port:3389] salve:map[host:127.0.0.1 port:3307]]]

内置类型 mtype.AnySlice

与 mtype.AnyMap使用方法一致
anySlice的数据结构如下(使用json演示):
[
	{
		"master": {
			"host": "127.0.0.1",
			"port": "3306"
		},
		"salve": {
			"host": "127.0.0.1",
			"port": "3307"
		}
	}
]
Note: key值索引直接使用字符串数值, 例:anySlice.Get("0.master.port")

内置类型 更多持续更新中...

# Functions

Append LinkedList.
Accept an any type value.
Get value.
Get value type.
Set value.
Convert src to target type.

# Constants

类型: map[string]interface{}.
类型: []map[string]interface{}.
类型: []interface{}.
类型: bool.
类型: byte.
类型: []byte.
类型: error.
类型: float64.
类型: int.
类型: int.
类型: []int.
类型: nil.
类型: rune.
类型: string.
类型: map[string]string.
类型: []map[string]string.
类型: []string.
类型: unknown.

# Structs

Any type data storage, use it can convert to target type.
Data Linked List.

# Type aliases

Built-in type: map[string]interface{}.
Built-in type: []map[string]interface{}.
Built-in type: []interface{}.