根据 url 查询参数创建嵌套结构

Create nested struct based on url query parameters

我的目标是从数据库中获取一些过滤记录。过滤基于依赖于另一个结构的结构:

type Group struct {
      ID          primitive.ObjectID
      Name        string
}

type Role struct {
    ID          primitive.ObjectID  
    Name        string              
    Description string              
    Groups      []*group.Group     
}

我根据 URL 个查询参数创建了一个角色结构对象:

var roleWP Role
if r.URL.Query().Has("name") {
    name := r.URL.Query().Get("name")
    roleWP.Name = name
}
if r.URL.Query().Has("description") {
    description := r.URL.Query().Get("description")
    roleWP.Description = description
}
if r.URL.Query().Has("groups") {
   //How would look groups parameter?
}

填充 Role 结构的 namedescription 字段非常简单。整个 url 将是:
myhost/roles?name=rolename&description=roledescription
但是,如果我想为 Group 结构传递数据, url 会是什么样子呢?是否可以在查询参数中将数据作为 json 对象传递?另外,我想提一下 Role 中的 groups 字段是一个数组。我理想的假人 url 看起来像:myhost/roles?name=rolename&description=roledescription&groups={name:groupname1}&groups={name:groupname2}

遍历组,拆分:,创建组并附加到切片:

roleWP := Role{
    Name:        r.FormValue("name"),
    Description: r.FormValue("description"),
}
for _, g := range r.Form["groups"] {
    g = strings.TrimPrefix(g, "{")
    g = strings.TrimSuffix(g, "}")
    i := strings.Index(g, ":")
    if i < 0 {
        // handle error
    }
    roleWP.Groups = append(roleWP.Groups, &Group{g[:i], g[i+1:]})
}

以下是如何使用 JSON 而不是 OP 的理想格式:

roleWP := Role{
    Name:        r.FormValue("name"),
    Description: r.FormValue("description"),
}
for _, s := range r.Form["groups"] {
    var g Group
    err := json.Unmarshal([]byte(s), &v)
    if err != nil {
        // handle error
    }
    roleWP.Groups = append(roleWP.Groups, &g)
}