【问题标题】:Golang how can I make sql row a stringGolang如何使sql行成为字符串
【发布时间】:2016-06-29 20:30:55
【问题描述】:

我正在使用 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。

【问题讨论】:

    标签: postgresql go


    【解决方案1】:

    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 或将其打印出来。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-12-17
      • 1970-01-01
      • 2014-11-22
      • 2017-10-23
      • 2017-02-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多