dqcwl02022 2019-03-14 02:15
浏览 74
已采纳

golang缺少len参数

How to make a row as map[string]map[string]interface{}

cannot use s.ID (type string) as type map[string]interface {} in assignment

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

Listservers

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条回答 默认 最新

  • doupo1865 2019-03-14 03:18
    关注

    The row is a SLICE of map[string]interface{}. You need to provide the length when you initialize the slice like this:

    row := make([]map[string]interface{}, 0)
    

    The index of a slice MUST be an integer, That's why you encounter the second problem mentioned in your comment.

    Let's suppose serverList is a slice. You code may be modified as:

    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
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料
  • ¥15 使用R语言marginaleffects包进行边际效应图绘制