亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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 關注
  • 188 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號