galang:type interface {}不支持索引

时间:2017-02-10 05:26:28

标签: go

我在尝试将地图添加到界面时收到以下错误:

无效操作:msgs [“Application”] [“instance-id”](类型interface {}不支持索引)

申请:

resultChannel := make(chan map[string]interface{})
    clients := make(map[string][]map[string]interface{})

    go func(clients map[string][]map[string]interface{}){
        for {
            msgs := <- resultChannel
            url := "http://xxxxxx/results/"+msgs["instance-id"].(string)
            res,err := http.Get(url)

            if err != nil{
                panic(err.Error())
            }
            body,err := ioutil.ReadAll(res.Body)
            if err != nil{
                panic(err.Error())
            }
            s, err := getResults([]byte(body))

            for i := range s {
                clientResults := map[string]interface{}{
                    s[i].Check.Name:s[i].Status,
                }

                clients[msgs["Application"]["instance-id"]["checks"]]=append(clients[msgs["Application"]["instance-id"]["checks"]],clientResults)

            }

        }
    }(clients)






for i := range s{
        if len(s[i].Application) > 0{
            clientMap := map[string]interface{}{
            "instance-id":s[i].Name,
            "Division":s[i].Division,
            "Status":2,
            "Application":s[i].Application,
            "checks":make(map[string]interface{}),
            }
            clients[s[i].Application]=append(clients[s[i].Application],clientMap)
            resultChannel <- clientMap
        }

        }

我不确定处理此类案件的最佳方法是什么。最后我需要有以下结构:

[
 application_name[instance-id:xxxxx Division:xxxxx Status:2 Application:fulfilment checks:[xxxxx:0,yyyy:1]] 
 application_name[instance-id:xxxxx Division:xxxxx Status:2 Application:fulfilment checks:[xxxxx:0,yyyy:1]]
]

1 个答案:

答案 0 :(得分:0)

创建一个结构类型来表示数据 并在地图数据类型中使用该结构而不是接口{}。在这种情况下,无需使用接口{}。

例如:

type Client struct {
        InstanceId string
        Division string
        Status int
        Application string
        Checks map[string]int
}