我正在使用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。
答案 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或将其打印出来。