运行 SELECT * FROM table Pgx 中的查询?

Running a SELECT * FROM table query in Pgx?

我正在将 PostgreSQL 与 一起使用,我正在尝试 运行 SELECT * Pgx 中的 FROM 查询。

我似乎无法进行迭代,因为它只是 returns table 中的最后一个键。我还试图在 运行 回显 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"} 

有什么帮助吗?

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)