Golang如何让sql行成为一个字符串

时间:2016-06-29 20:30:56

标签: 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()方法附加到它,它将使它成为一个字符串。从上面的代码中可以看出, io.WriteString String 作为第二个参数,因此我想将 Rows 变量设为String在它返回Json后,我可以通过将它传递给方法在浏览器中显示它。我想用String Rows替换Hello World。

1 个答案:

答案 0 :(得分:4)

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