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 關注
- 114 瀏覽
添加回答
舉報