并需要你的幫助。想構建簡單的 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"` }
- 2 回答
- 0 關注
- 188 瀏覽
添加回答
舉報
0/150
提交
取消