Go, pgx: SELECT query returns 只有一行

Go, pgx: SELECT query returns only one row

Golang,pgx: 我正在尝试从 t_example(当前 20 项)中获取所有行,但由于某种原因只有一个 returns(第一个)。我尝试在第一次迭代后调试 rows.Next() returns 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
}

您的代码不检查错误:

  • row.Scan(&ex.Id, &ex.Name) 可能 return 一个错误(并且,在 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

旁注:在绝大多数情况下,您不希望 return 指向切片的指针(例如:*[]Example)但是一片(例如:[]Example