ibeautiful
2023-06-12 19:09:03
如何使行成為 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 關注
- 187 瀏覽
添加回答
舉報
0/150
提交
取消