遍历结构并执行数据库查询

So I'm new to go and I come from a javascript/node background and for practice, I've been rewriting some of my javascript code into go.

I have a situation where I have an struct (in node it was my object) and I need to iterate over it and perform two database queries. I have something that works but it seems costly and repetitive.

Struct:

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

Then in the function where I handle an api request that returns JSON binded to this struct I use a for range loop for each role under active. For each one I perform the same first query and then a second one that is specific to each one.

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
}

This method will work but it doesn't feel completely right and I would love to get some input from people experienced with go.

duanjiu3486
duanjiu3486 已经显示了我的意思的方法,用于插入(创建)-一种插入方法。与其他CRUD操作相同。
2 年多之前 回复
dpkrh2444
dpkrh2444 您能为我模拟一个简单的函数,还是为我指出正确的方向以执行类似的操作。结构和切片对我来说是新的,因此不胜感激。不幸的是,尽管他们在编写我从相关示例中学得最好的文档方面做得很好,但我对文档的了解并不好。
2 年多之前 回复
douqiu1604
douqiu1604 如果角色是三个用户列表唯一不同的地方,则您可以编写一个函数,该函数以字符串的一部分和角色作为参数,然后为每个列表调用该函数。不过,这似乎很明显,所以也许比这更复杂...?
2 年多之前 回复
douyijin7741
douyijin7741 例如,在javascript中,我将使用对象循环,角色将是键,名称将是值,并且它非常紧凑,我只需要使用一次插入查询(在代码中)。
2 年多之前 回复
dongzhaiqiang6108
dongzhaiqiang6108 我不确定我是否理解正确,但是我确实有CRUD类型的方法可以插入具有角色的用户(除非这不是您的意思),这只是三个单独的循环,感觉不对
2 年多之前 回复
dongpan2788
dongpan2788 我猜这感觉很累。由于速度原因,我会完全避免在javascript中使用此方法。我也相信这是一个错误,我会立即修复。
2 年多之前 回复
dqydp44800
dqydp44800 除了@CeriseLimón的建议外,您还可以使用CRUD方法与数据库进行交互,从而使数据库看起来更整洁。
2 年多之前 回复
dongyanju0945
dongyanju0945 您可以使用GORMORM,它支持模型的结构,并且可以将整个对象插入数据库。
2 年多之前 回复
doumei1926
doumei1926 那那种方法对您来说不合适呢?您是否认为无需三个单独的循环就可以做到这一点?另外,为什么管理员和常规规则切片为空接口而不是某种类型的切片?
2 年多之前 回复
doumaque6551
doumaque6551 将Admins和Regulars声明为具体类型,以便在插入表时避免类型断言。
2 年多之前 回复

1个回答

Would something like this be better?

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)
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问