1 回答

TA贡献1831条经验 获得超4个赞
我从未与go-pg图书馆合作过,我的回答主要集中在其他通用的东西上,并不特定于 golang 或 go-pg。
不管rowshere 在两个查询之间共享时具有相同的引用(所以一个rows.Close()调用就足够了,除非库有一些特殊的实现),定义两个变量更清晰,比如userRows和bookRows。
虽然我已经说过我没有使用过go-pg,但我相信您不需要遍历行并手动扫描所有行的 id,我相信 lib 已经提供了一些这样的 API(基于对文档):
userIds := []int{}
err := pgClient.Query(&userIds, "select id from users where ...", args...)
关于你的第二个问题,这取决于你所说的“好的”是什么意思。由于您进行了一些同步迭代,我认为这不会导致错误,但就编码风格而言,就个人而言,我不会这样做。
我认为在你的情况下最好的做法是:
// repo layer
func getUserIds(args whatever) ([]int, err) {...}
// these can be exposed, based on your packaging logic
func getBookIds(args whatever) ([]int, err) {...}
// service layer, or wherever you want to aggregate both queries
func getUserAndBookIds() ([]int, []int, err) {
userIds, err := getUserIds(...)
// potential error handling
bookIds, err := getBookIds(...)
// potential error handling
return userIds, bookIds, nil // you have done err handling earlier
}
我认为这段代码更容易阅读/维护。您不会面临变量重新分配和其他问题。
您可以查看go-pg 文档,了解有关如何改进查询的更多详细信息。
- 1 回答
- 0 关注
- 97 浏览
添加回答
举报