每天一个知识点:Go 结构体转map

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]