如何使行成为 map[string]map[string]interface{}不能在赋值中使用 s.ID(字符串类型)作为 map[string]interface {} 类型var row = make(map[string]map[string]interface{})列表服务器func ListServers() (map[string]map[string]interface{}, error) {listOptions := servers.ListOpts{}pager := servers.List(GetClientCompute(), listOptions)err := pager.EachPage(func(page pagination.Page) (bool, error) { serverList, err := servers.ExtractServers(page) if err != nil { fmt.Println(err) } for _, s := range serverList { row["ID"] = s.ID <---- error is here row["Name"] = s.Name <---- error is here if s.Addresses["public"] != nil { for _, i := range s.Addresses["public"].([]interface{}) { temp := i.(map[string]interface{}) if temp["version"].(float64) == 4 { row["IP"] = temp["addr"] } } } t, _ := time.Parse(time.RFC3339, s.Created) row["Flavor"] = s.Flavor row["Created"] = time.Now().Sub(t) <---- error is here row["Status"] = s.Status <---- error is here } return false, nil})// fmt.Println(lists)return row, err}
1 回答
鸿蒙传说
TA贡献1865条经验 获得超7个赞
是row的 SLICE map[string]interface{}。像这样初始化切片时需要提供长度:
row := make([]map[string]interface{}, 0)
切片的索引必须是整数,这就是您遇到评论中提到的第二个问题的原因。
让我们假设serverList是一片。您的代码可以修改为:
rows := make([]map[string]interface{}, 0) // create a slice
// ... codes omitted
for _, s := range serverList {
row := make(map[string]interface{}) // create an item
row["ID"] = s.ID
row["Name"] = s.Name
// ... codes omitted
row["Flavor"] = s.Flavor
row["Created"] = time.Now().Sub(t)
row["Status"] = s.Status
rows = append(rows, row) // append the item to the slice
}
return rows, err
- 1 回答
- 0 关注
- 153 浏览
添加回答
举报
0/150
提交
取消