英文:
Golang - retrieve multiple results from MySQL, then display them as JSON
问题
最近,我正在学习Go(Golang)。我正在尝试使用Martini和jwt-go创建一个简单的Web服务。在检索单行数据并将其放入JSON作为响应方面,我没有遇到任何困难。但是,当处理多行数据时,情况就完全不同了。基本上,我参考了这里的被接受的答案。
以下是我的代码片段:
m.Get("/users", func(params martini.Params, r render.Render) {
db, err := sql.Open("mysql", "root:@/sirat_v2")
if err != nil {
panic(err.Error())
}
defer db.Close()
rows, err := db.Query("SELECT user_id, nama FROM `users` WHERE password = ?", "asdfasdf")
defer rows.Close()
cols, err := rows.Columns()
if err != nil {
panic(err.Error())
}
partages := make([]*Partage, 0, 10)
var user_id int
var nama string
for rows.Next() {
err = rows.Scan(&user_id, &nama)
if err != nil { /* error handling */
}
partages = append(partages, &Partage{user_id, nama})
}
})
在尝试构建时,出现了一个错误,说Partage未定义。
英文:
Recently, I'm learning about Go (Golang). I'm trying to make a simple web service using Martini and jwt-go. I didn't find any difficulty in retrieving a single row data and put in JSON as the response. But, when dealing with multiple-rows, it's a whole different story. Basically, I refer to the accepted answer here.
Here is the piece of my code:
m.Get("/users", func(params martini.Params, r render.Render) {
db, err := sql.Open("mysql", "root:@/sirat_v2")
if err != nil {
panic(err.Error())
}
defer db.Close()
rows, err := db.Query("SELECT user_id, nama FROM `users` WHERE password = ?", "asdfasdf")
defer rows.Close()
cols, err := rows.Columns()
if err != nil {
panic(err.Error())
}
partages := make([]*Partage, 0, 10)
var user_id int
var nama string
for rows.Next() {
err = rows.Scan(&user_id, &nama)
if err != nil { /* error handling */
}
partages = append(partages, &Partage{user_id, nama})
}
})
When trying to build, there's an error said that Partage is undefined.
答案1
得分: 2
错误出现是因为您使用结构体Partage
创建了一个对象,但您没有声明它。
type Partage struct {
user_id string
nama string
}
> 但是我如何将结果显示为JSON响应?我尝试了r.JSON(200, partages)
,但结果没有显示出来。
在martini中,您可以使用r.JSON()
将rows
打印为JSON。
m.Get("/users", func(params martini.Params, r render.Render) {
// ...
r.JSON(200, map[string]interface{}{
"data": rows
})
})
英文:
The error showing up because you use struct Partage
to create an object, but you haven't declared it.
type Partage struct {
user_id string
nama string
}
> But how do I display the result as JSON response? I've tried r.JSON(200, partages) but the results aren't displayed
In martini you can use r.JSON()
to print rows
as JSON
m.Get("/users", func(params martini.Params, r render.Render) {
// ...
r.JSON(200, map[string]interface{}{
data: rows
})
})
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论