Golang,pgx:我正在嘗試從 t_example 獲取所有行(當前為 20 項),但由于某種原因,只有一個回傳(第一個)。我嘗試除錯并且 rows.Next() 在第一次迭代后回傳 false。你能幫我提些建議嗎?
我是新手,但我已經嘗試提前在這里找到類似的案例:)
我的代碼:
func (ts *exampleStorage) GetAll() *[]Example {
q := `SELECT id, name FROM t_example`
rows := ts.client.Query(context.Background(), q)
example := make([]Example, 0)
for rows.Next() {
var ex Example
rows.Scan(&ex.Id, &ex.Name)
example = append(example, ex)
}
return &example
}
uj5u.com熱心網友回復:
您的代碼不檢查錯誤:
row.Scan(&ex.Id, &ex.Name)可能會回傳一個錯誤(并且,在pgx實作中,這個錯誤對于rows迭代來說是致命的):
err := rows.Scan(&ex.Id, &ex.Name)
if err != nil {
fmt.Printf("*** rows.Scan error: %s", err)
return nil, err
}
- 有一個錯誤檢查問題:您應該檢查退出回圈后
sql.Rows / pgx.Rows是否發生錯誤:for rows.Next() {
for rows.Next() {
...
}
// check rows.Err() after the last rows.Next() :
if err := rows.Err(); err != nil {
// on top of errors triggered by bad conditions on the 'rows.Scan()' call,
// there could also be some bad things like a truncated response because
// of some network error, etc ...
fmt.Printf("*** iteration error: %s", err)
return nil, err
}
return example, nil
附注:在絕大多數情況下,您不想回傳指向切片的指標(例如:)*[]Example而是切片(例如[]Example:)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/481679.html
標籤:PostgreSQL 去 pgx
上一篇:確定逗號分隔字串的長度
