并需要你的帮助。想构建简单的 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 关注
- 164 浏览
添加回答
举报
0/150
提交
取消