go lang根据过滤条件构建地图

时间:2016-07-14 18:10:00

标签: dictionary go

我有以下结构

type ModuleList []Module

type Module struct {
    Id                  string
    Items               []Item
    Env                 map[string]string
}

type Item struct {
    Id    string
    Host  string
}

我有一个返回 ModuleList 的服务;但是我想创建一个函数,它可以根据模块 Env 键值对 ModuleList 进行分组,然后返回 map [string] ModuleList < / strong>或 map [string] *模块

我可以使用任何样本函数吗?

我曾尝试过这样做

appsByGroup := make(map[string]ModuleList)
    for _, app := range apps {
        if _, ok := app.Env["APP_GROUP"]; ok {
            appGroup := app.Env["APP_GROUP"]
            appsByGroup[appGroup] = app
        }
    }

但不太确定如何将元素添加到数组

1 个答案:

答案 0 :(得分:1)

如果您想将所有Modules分组为APP_GROUP,那么您几乎是正确的。您只是没有正确附加到切片:

appsByGroup := make(map[string]ModuleList)
for _, app := range apps {
    if _, ok := app.Env["APP_GROUP"]; ok {
        appGroup := app.Env["APP_GROUP"]
        // app is of type Module while in appsGroup map, each string
        // maps to a ModuleList, which is a slice of Modules.
        // Hence your original line
        // appsByGroup[appGroup] = app would not compile
        appsByGroup[appGroup] = append(appsByGroup[appGroup], app)
    }
}

现在,您可以使用以下方式访问组中的所有Modules(存储在切片中):

// returns slice of modules (as ModuleList) with
// Env["APP_GROUP"] == group
appGroups[group]