迭代struct并执行数据库查询

时间:2017-11-15 04:44:58

标签: go iteration

所以我是新手,我来自javascript / node背景,为了练习,我一直在重写我的一些javascript代码。

我有一种情况,我有一个结构(在节点中它是我的对象),我需要迭代它并执行两个数据库查询。我有一些有效的东西,但似乎代价高昂且重复。

STRUCT:

type SiteUsers struct {
    Active struct {
        Moderators []string `json:"moderators"`
        Admins     []string `json:"admins"`
        Regulars   []string `json:"regulars"`
    } `json:"active"`
}

然后在我处理api请求的函数中,该请求返回绑定到此结构的JSON,我为每个处于活动状态的角色使用for range循环。对于每一个,我执行相同的第一个查询,然后执行第二个查询,具体到每个查询。

v := getSiteUsers(&usrs, website)

for _, moderators := range v.Active.Moderators {
    // Insert into user table
    // Insert into user table with role of moderator
}

for _, admins := range v.Active.Admins {
    // Insert into user table
    // Insert into user table with role of admin
}

for _, regulars := range v.Active.Regulars {
    // Insert into user table
    // Insert into user table with role of regular
}

这种方法可行,但感觉并不完全正确,我很乐意从经验丰富的人那里得到一些意见。

1 个答案:

答案 0 :(得分:1)

这样的事情会更好吗?

v := getSiteUsers(&usrs, website)

insertUsers := func(users []string, role roleType) {
    for _, user := range users {
        // Insert into user table
        // Insert into user table with given role
    }
}

insertUsers(v.Active.Moderators, moderatorRole)
insertUsers(v.Active.Admins, adminRole)
insertUsers(v.Active.Regulars, regularRole)