postgresql - Golang 如何使 sql 行成为一个字符串

标签 postgresql go

我正在使用 Golang 和 Postgres,Postgres 有一个高级功能,它可以以 Json 格式返回您的查询。我想要做的是获取 Json 查询结果并返回它,但我遇到了麻烦,因为它必须是一个字符串才能返回它。这是我的代码

 package main

    import(
        "fmt"
        "database/sql"
        _ "github.com/lib/pq"

        "log"
    )

    func HelloServer(w http.ResponseWriter, req *http.Request) {

     db, err := sql.Open("postgres", "user=postgres password=password dbname=name sslmode=disable")

        if err != nil {
            log.Fatal(err)
        }

         defer db.Close()
        rows, err := db.Query("select To_Json(t) (SELECT * from cars)t")

    io.WriteString(w, "hello, world!\n")
}


 func main() {
    http.HandleFunc("/hello", HelloServer)
    log.Fatal(http.ListenAndServe(":12345", nil))
}

Rows 元素返回一个 Json 数组,如何将 Rows 元素转换为 String ?对于 C# 和 Java,我只需将 .ToString() 方法附加到它,它就会使它成为一个 string 。从上面的代码中可以看出,io.WriteStringString 作为第二个参数,因此我想将 Rows 变量设为 String在它返回 Json 之后,我可以通过将它传递给方法来在浏览器中显示它。我想用字符串行替换 Hello World。

最佳答案

Rows 是 sql.Rows 类型。为了使用数据库查询返回的数据,您必须迭代“行”。

来自 the docs 的示例

age := 27
rows, err := db.Query("SELECT name FROM users WHERE age=?", age)
if err != nil {
        log.Fatal(err)
}
defer rows.Close()
for rows.Next() {
        var name string
        if err := rows.Scan(&name); err != nil {
                log.Fatal(err)
        }
        fmt.Printf("%s is %d\n", name, age)
}
if err := rows.Err(); err != nil {
        log.Fatal(err)
}

您应该改用 QueryRow因为您期望数据库返回一个结果。在任何一种情况下,一旦您使用“扫描”将数据放入您自己的变量中,您就可以解析 JSON 或将其打印出来。

关于postgresql - Golang 如何使 sql 行成为一个字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38109507/

相关文章:

postgresql - COPY 命令运行缓慢

go - 如何在 GO 中检查命令行参数

google-app-engine - 具有 GRPC 和 Cloud Endpoints 的 App Engine Flex 环境

go - 为 TOML 文件和 golang 解析表中的键值对

node.js - 将 knex SELECT 查询结果用于另一个 SELECT 查询

database - 用于保存 django 模型的单独线程

postgresql - 从 Postgresql 函数返回自定义类型

postgresql - Postgis 经度、纬度转几何 postgresql

makefile - go的多包makefile示例

sorting - 如何使用多个排序参数对结构进行排序?