в golang отсутствует аргумент len

Как сделать строку как map[string]map[string]interface{}

нельзя использовать s.ID (строка типа) в качестве типа карты [строка] интерфейса {} в назначении

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

}


person Bilguun    schedule 14.03.2019    source источник


Ответы (1)


row — это ЧАСТЬ 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
person Hunsin    schedule 14.03.2019