Golang – 从MySQL检索多个结果,然后将它们显示为JSON。

huangapple go评论120阅读模式
英文:

Golang - retrieve multiple results from MySQL, then display them as JSON

问题

最近,我正在学习Go(Golang)。我正在尝试使用Martini和jwt-go创建一个简单的Web服务。在检索单行数据并将其放入JSON作为响应方面,我没有遇到任何困难。但是,当处理多行数据时,情况就完全不同了。基本上,我参考了这里的被接受的答案

以下是我的代码片段:

  1. m.Get("/users", func(params martini.Params, r render.Render) {
  2. db, err := sql.Open("mysql", "root:@/sirat_v2")
  3. if err != nil {
  4. panic(err.Error())
  5. }
  6. defer db.Close()
  7. rows, err := db.Query("SELECT user_id, nama FROM `users` WHERE password = ?", "asdfasdf")
  8. defer rows.Close()
  9. cols, err := rows.Columns()
  10. if err != nil {
  11. panic(err.Error())
  12. }
  13. partages := make([]*Partage, 0, 10)
  14. var user_id int
  15. var nama string
  16. for rows.Next() {
  17. err = rows.Scan(&user_id, &nama)
  18. if err != nil { /* error handling */
  19. }
  20. partages = append(partages, &Partage{user_id, nama})
  21. }
  22. })

在尝试构建时,出现了一个错误,说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:

  1. m.Get("/users", func(params martini.Params, r render.Render) {
  2. db, err := sql.Open("mysql", "root:@/sirat_v2")
  3. if err != nil {
  4. panic(err.Error())
  5. }
  6. defer db.Close()
  7. rows, err := db.Query("SELECT user_id, nama FROM `users` WHERE password = ?", "asdfasdf")
  8. defer rows.Close()
  9. cols, err := rows.Columns()
  10. if err != nil {
  11. panic(err.Error())
  12. }
  13. partages := make([]*Partage, 0, 10)
  14. var user_id int
  15. var nama string
  16. for rows.Next() {
  17. err = rows.Scan(&user_id, &nama)
  18. if err != nil { /* error handling */
  19. }
  20. partages = append(partages, &Partage{user_id, nama})
  21. }
  22. })

When trying to build, there's an error said that Partage is undefined.

答案1

得分: 2

错误出现是因为您使用结构体Partage创建了一个对象,但您没有声明它。

  1. type Partage struct {
  2. user_id string
  3. nama string
  4. }

> 但是我如何将结果显示为JSON响应?我尝试了r.JSON(200, partages),但结果没有显示出来。

martini中,您可以使用r.JSON()rows打印为JSON。

  1. m.Get("/users", func(params martini.Params, r render.Render) {
  2. // ...
  3. r.JSON(200, map[string]interface{}{
  4. "data": rows
  5. })
  6. })
英文:

The error showing up because you use struct Partage to create an object, but you haven't declared it.

  1. type Partage struct {
  2. user_id string
  3. nama string
  4. }

> 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

  1. m.Get("/users", func(params martini.Params, r render.Render) {
  2. // ...
  3. r.JSON(200, map[string]interface{}{
  4. data: rows
  5. })
  6. })

huangapple
  • 本文由 发表于 2015年10月12日 11:31:38
  • 转载请务必保留本文链接:https://go.coder-hub.com/33072861.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定