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

并需要你的帮助。想构建简单的 api 并遇到一些问题。我选择了带有postgres 驱动程序的gin和 database/sql


package main


import (

    "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)

但如何做到这一点......不知道:(


喵喵时光机
浏览 165回答 2
2回答

Smart猫小萌

免责声明:我是全新的由于您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"` }
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go