1、反射
type sign struct {
Name string `json:"name,omitempty"`
Age int `json:"age,omitempty"`
}
var s sign
s.Name = "csdn"
s.Age = 18
//方式1 反射
var data = make(map[string]interface{})
t := reflect.TypeOf(s)
v := reflect.ValueOf(s)
for i := 0; i < t.NumField(); i++ {
data[t.Field(i).Name] = v.Field(i).Interface()
}
fmt.Println(data)
结果:map[Age:18 Name:csdn]
2、通过structs库
首先进行structs库进行安装
go get github.com/fatih/structs
// 重点:添加structs 标签
type sign struct {
Name string `json:"name,omitempty" structs:"name"` // 重点:添加structs 标签
Age int `json:"age,omitempty" structs:"age"`
}
var s sign
s.Name = "csdn"
s.Age = 18
// 方式2
data := structs.Map(s)
fmt.Println(data)
结果:map[age:18 name:csdn]
3、结构体转string 再通过string转map
type sign struct {
Name string `json:"name,omitempty"`
Age int `json:"age,omitempty"`
}
var s sign
s.Name = "csdn"
s.Age = 18
// 先把结构体转成json字符串
str, err := json.Marshal(s) // 返回 byte, err
if err != nil {
return
}
// {"name":"csdn","age":18}
// 在转成map
var data = make(map[string]interface{})
if err := json.Unmarshal(str, &data); err != nil {
return
}
fmt.Println(data)
结果:map[age:18 name:csdn]