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 }
标签:Println,map,struct,userMap,fmt,interface,json,go,Id 来源: https://www.cnblogs.com/thcn/p/16514065.html