亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Go,pgx:SELECT 查詢只返回一行

Go,pgx:SELECT 查詢只返回一行

Go
白衣染霜花 2022-12-19 10:57:32
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}
查看完整描述

1 回答

?
UYOU

TA貢獻1878條經驗 獲得超4個贊

您的代碼不檢查錯誤:


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


查看完整回答
反對 回復 2022-12-19
  • 1 回答
  • 0 關注
  • 157 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號