增加struct的包装类型 #3

Merged
zhangdeman merged 1 commits from feature/struct into master 2023-08-10 16:58:43 +08:00
3 changed files with 113 additions and 0 deletions

View File

@ -496,3 +496,13 @@ type AnySliceResult struct {
Value []interface{}
Err error
}
// MapResult 转map的结果
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 16:05 2023/8/10
type MapResult struct {
Value Map
Err error
}

34
map.go
View File

@ -8,6 +8,8 @@
package wrapper
import (
"bytes"
"encoding/json"
"errors"
"git.zhangdeman.cn/zhangdeman/easymap"
"reflect"
@ -43,6 +45,38 @@ func EasyMapWithError(mapData interface{}) (Map, error) {
return m, nil
}
// EasyMapFromStruct 从struct转map
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 16:11 2023/8/10
func EasyMapFromStruct(data interface{}) Map {
byteData, _ := json.Marshal(data)
return EasyMapFromByte(byteData)
}
// EasyMapFromString 从string转为Map
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 16:12 2023/8/10
func EasyMapFromString(data string) Map {
return EasyMapFromByte([]byte(data))
}
// EasyMapFromByte 从字节数组转为Map
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 16:12 2023/8/10
func EasyMapFromByte(data []byte) Map {
var tmpMap map[interface{}]interface{}
decoder := json.NewDecoder(bytes.NewReader(data))
decoder.UseNumber()
_ = decoder.Decode(&tmpMap)
return EasyMap(tmpMap)
}
// Map ...
//
// Author : go_developer@163.com<白茶清欢>

69
struct.go Normal file
View File

@ -0,0 +1,69 @@
// Package wrapper ...
//
// Description : wrapper ...
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 2023-08-10 16:05
package wrapper
import (
"errors"
"reflect"
)
// NewStruct 包装的数据类型
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 16:07 2023/8/10
func NewStruct(data interface{}) *Struct {
s, _ := NewStructWithError(data)
return s
}
// NewStructWithError ...
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 16:17 2023/8/10
func NewStructWithError(data interface{}) (*Struct, error) {
if data == nil {
return nil, errors.New("input data is nil")
}
reflectType := reflect.TypeOf(data)
if reflectType.Kind() == reflect.Ptr {
reflectType = reflectType.Elem()
if reflectType.Kind() != reflect.Struct {
return nil, errors.New("input data type is " + reflectType.Elem().Kind().String())
}
}
return &Struct{data: data}, nil
}
// Struct 结构体类型
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 16:05 2023/8/10
type Struct struct {
data interface{}
}
// ToMap 转为Map
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 16:08 2023/8/10
func (s *Struct) ToMap() MapResult {
if nil == s.data {
return MapResult{
Value: EasyMap(map[interface{}]interface{}{}),
Err: nil,
}
}
return MapResult{
Value: EasyMapFromStruct(s.data),
Err: nil,
}
}