3

我正在使用 PostgreSQL,并且我正在尝试在 Pgx 中运行 SELECT * FROM 查询。

我似乎无法降低迭代,因为它只返回表中的最后一个键。我还尝试在运行 echo HTTP 服务器库时将其作为 JSON 提供。

main.go 函数(从我的数据库连接文件中导入 connection.Conn)

func getLanguages(c echo.Context) (err error) {

    Conn := connection.Conn
    type Row struct {
        Id       int
        Language string
        Name     string
    }

    rowArray := Row{}

    rows, err := Conn.Query(context.Background(), "SELECT * FROM languages")

    defer rows.Close()

    // rowsCount := 0

    for rows.Next() {
        err := rows.Scan(&rowArray.Id, &rowArray.Language, &rowArray.Name)
        if err != nil {
            log.Fatal(err)
        }
    }

    fmt.Println(rowArray)

    return c.JSON(http.StatusOK, rowArray)

} 

预期产出

 id |  language  |        name         
----+------------+---------------------
  1 | none       | Plaintext
  2 | go         | Golang
  3 | python     | Python
  4 | js         | JavaScript
  5 | jsx        | React JSX
  6 | ts         | TypeScript
  7 | tsx        | React TSX
  8 | tsconfig   | TSConfig
  9 | rb         | Ruby
 10 | sql        | SQL
 11 | sol        | Solidity (Ethereum)
 12 | html       | HTML
 13 | css        | CSS
 14 | csharp     | C#
 15 | haskell    | Haskell
 16 | rust       | Rust
 17 | scala      | Scala
 18 | svg        | SVG
 19 | graphql    | GraphQL
 20 | php        | PHP
 21 | powershell | PowerShell
 22 | yaml       | YAML
 23 | json       | JSON

实际输出

{"Id":23,"Language":"json","Name":"JSON"} 

有什么帮助吗?

4

1 回答 1

6

rowArray := Row{}创建Row. 然后循环遍历结果并将它们存储在同一个变量中。所以每次迭代都会覆盖之前检索到的任何内容。如果有多个结果,则使用切片;类似于以下未经测试的代码:

rows, err := Conn.Query(context.Background(), "SELECT * FROM languages")
if err != nil {
    log.Fatal(err)
}
defer rows.Close()

var rowSlice []Row
for rows.Next() {
    var r Row
    err := rows.Scan(&r.Id, &r.Language, &r.Name)
    if err != nil {
        log.Fatal(err)
    }
   rowSlice = append(rowSlice, r)
}
if err := rows.Err(); err != nil {
    log.Fatal(err)
}

fmt.Println(rowSlice)
于 2021-03-30T01:53:48.033 回答