Go语言结构体转字典实例

结构体转字典实例

1
column := c.GetStrings("column")
1
2
3
4
5
6
7
8
9
10
11
12
13
14
list, count, err := services.NewGcase(services.Slave()).CaseList(NewContext(), params, pageSize, pageNum)
if err != nil {
c.ErrorCode(ErrCodeRet, http.StatusInternalServerError, "get case list failed")
}

res := make([]map[string]interface{}, 0)
for _, item := range list {
res = append(res, structConvertMapByTag(item, "json", column))
}

ret := make(map[string]interface{}, 0)
ret["data"] = res
ret["count"] = count
c.Correct(ret)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
func structConvertMapByTag(obj interface{}, tagName string, col []string) map[string]interface{} {
t := reflect.TypeOf(obj)
v := reflect.ValueOf(obj)

var data = make(map[string]interface{})

for i := 0; i < t.NumField(); i++ {
if len(col) > 0 {
for _, item := range col {
tagName := t.Field(i).Tag.Get(tagName)
if tagName == item {
fmt.Println(tagName)
if tagName != "" && tagName != "-" {
data[tagName] = v.Field(i).Interface()
}
}
}
} else { // 不设置列的时候显示所有字段
tagName := t.Field(i).Tag.Get(tagName)
if tagName != "" && tagName != "-" {
data[tagName] = v.Field(i).Interface()
}
}

}
return data
}