go struct转map
第一种方式:
使用json包
package main
import (
"encoding/json"
"fmt"
"reflect"
)
func main() {
type User struct {
Id int64 `json:"Id"`
Name string `json:"Name"`
Sex int `json:"Sex"`
Age uint `json:"Age"`
}
lisi := User{
Id: 1008,
Name: "lisi",
Sex: 1,
Age: 26,
}
userByte, err := json.Marshal(lisi)
if err != nil {
panic("json encode错误=" + err.Error())
}
var userMap = make(map[string]interface{})
unmarshalErr := json.Unmarshal(userByte, &userMap)
if unmarshalErr != nil {
panic("json decode错误=" + unmarshalErr.Error())
}
fmt.Printf("%+v", userMap)
//注意⚠️ 这里 Id本身应该是int64,通过json包转map 会变成float64,使用时应再次转换类型
//报错:panic: interface conversion: interface {} is float64, not int64
//fmt.Println(userMap["Id"].(int64))
//报错:panic: interface conversion: interface {} is float64, not uint
//fmt.Println(userMap["Age"].(uint))
//正确写法
fmt.Println(int64(userMap["Id"].(float64)))
fmt.Println(uint(userMap["Age"].(float64)))
fmt.Println(userMap["Id"], userMap["Name"])
}
第二种方式:
利用reflect进行解析
func structToMap(obj interface{}) map[string]interface{} {
//reflect
v := reflect.ValueOf(obj)
t := reflect.TypeOf(obj)
ret := make(map[string]interface{})
for i := 0; i < t.NumField(); i++ {
ret[t.Field(i).Name] = v.Field(i).Interface()
}
return ret
}

浙公网安备 33010602011771号