我有以下结构
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
}
}
但不太确定如何将元素添加到数组
答案 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]