1 回答

TA貢獻1936條經驗 獲得超7個贊
您編寫的代碼存在一些問題。避免連接泄漏問題的直接答案是關閉文檔中提到rows的迭代器。調用它的正常方式是在語句中:defer
rows, err := db.Query(
"select 1 from things where id = $1",
thing,
)
if err != nil {
return nil, fmt.Errorf("can't select thing (%d): %w", thing, err)
}
defer rows.Close()
found := false
for rows.Next() {
found = true
break
}
其次,由于您只關心單個結果,因此根本沒有理由獲取多行結果集,這也將隱式解決連接泄漏問題。有關在 Postgres 中檢查存在的最快方法的討論,請參閱這篇文章。如果我們在這里調整:
row, err := db.QueryRow(
"select EXISTS(SELECT 1 from things where id = $1)",
thing,
)
if err != nil {
return nil, fmt.Errorf("can't select thing (%d): %w", thing, err)
}
var found bool
if err := row.Scan(&found); err != nil {
return nil, fmt.Errorf("Failed to scan result: %w", err)
}
- 1 回答
- 0 關注
- 104 瀏覽
添加回答
舉報