为了账号安全,请及时绑定邮箱和手机立即绑定

Golang 切片结构或新手在构建 REST 时遇到麻烦

Golang 切片结构或新手在构建 REST 时遇到麻烦

Go
喵喵时光机 2021-10-18 16:53:27
并需要你的帮助。想构建简单的 api 并遇到一些问题。我选择了带有postgres 驱动程序的gin和 database/sqlpackage mainimport (    "database/sql"    "fmt"    "github.com/gin-gonic/gin"    _ "github.com/lib/pq")func main() {    router := gin.Default()    router.GET("/search/:text", SearchWord)    router.Run(":8080")}我需要向 DB 查询并根据此请求生成 json。func checkErr(err error) {    if err != nil {        panic(err)    }}type Message struct {    ticket_id int    `json:"ticket_id"`    event     string `json:"event"`}func SearchWord(c *gin.Context) {    word := c.Params.ByName("text")    db, err := sql.Open("postgres", "host=8.8.8.8 user= password= dbname=sample")    defer db.Close()    checkErr(err)    rows, err2 := db.Query("SELECT ticket_id,event FROM ....$1, word)    checkErr(err)    for rows.Next() {        var ticket_id int        var event string        err = rows.Scan(&ticket_id, &event)        checkErr(err)        fmt.Printf("%d | %s \n\n", ticket_id, event)    }}这个尾声工作得很好,但是当我需要制作 json. 我需要制作一行结构type Message struct {    ticket_id int    `json:"ticket_id"`    event     string `json:"event"`}然后我需要创建 slice ,并附加每一行。 Next() 循环一个比用 Json 回答浏览器的答案...c.JSON(200, messages)但如何做到这一点......不知道:(
查看完整描述

2 回答

?
Smart猫小萌

TA贡献1911条经验 获得超7个赞

免责声明:我是全新的

由于您Scan将列数据输入到变量中,因此您应该能够使用它们的值初始化结构:

m := &Message{ticket_id: ticket_id, event: event}

你可以初始化一个切片

s := make([]*Message, 0)

然后在实例化后附加每个消息结构:

s = append(s, m)


因为我对 go 不太熟悉,所以有几件事我不确定:

  • 将数据从查询复制到您的变量后,使用rows.Scan初始化Message结构是否按预期复制当前迭代值?

  • 如果有一种方法可以从您的查询中获取总行数,那么初始化静态长度数组而不是切片的性能可能会更高?

  • 我认为@inf 删除了关于将你Message的 json编组到 json 的答案可能需要解决,并且Message字段可能需要大写

复制自@inf:

结构成员的名称需要大写,以便它们被导出并可以被访问。

type Message struct {

    Ticket_id int    `json:"ticket_id"`

    Event     string `json:"event"` }


查看完整回答
反对 回复 2021-10-18
  • 2 回答
  • 0 关注
  • 164 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信