Files
fish03andClaude Opus 5.5 bef9f8b4ed Initial commit
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-23 14:43:16 +07:00

53 lines
1.2 KiB
Go

package utils
import (
"fmt"
"github.com/mitchellh/mapstructure"
"reflect"
)
func Struct2Map(obj interface{}) map[string]interface{} {
t := reflect.TypeOf(obj)
v := reflect.ValueOf(obj)
if t.Kind() == reflect.Ptr {
t = t.Elem()
v = reflect.Indirect(v)
}
var data = make(map[string]interface{})
//func (v Value) NumField() int, 返回v持有的结构体类型值的字段数,如果v的Kind不是Struct会panic
for i := 0; i < t.NumField(); i++ {
n := t.Field(i).Name
vv := v.Field(i).Interface()
data[Capitalize(n)] = vv
}
return data
}
func Map2Struct(obj interface{}, mapInfo map[string]interface{}) interface{} {
err := mapstructure.Decode(mapInfo, obj)
if err != nil {
fmt.Println(err)
}
return obj
}
// Capitalize 字符首字母大写
func Capitalize(str string) string {
var upperStr string
vv := []rune(str) // 后文有介绍
for i := 0; i < len(vv); i++ {
if i == 0 {
if vv[i] >= 65 && vv[i] <= 96 { // 后文有介绍
vv[i] += 32 // string的码表相差32位
upperStr += string(vv[i])
} else {
fmt.Println("Not begins with uppercase letter,")
return str
}
} else {
upperStr += string(vv[i])
}
}
return upperStr
}