我尝试查询数据库并使用查询结果创建像这样的json
[{“ TransID”:“交易ID1”,ProductID“:[” ProID1“,” ProID2“,” ProID3“,” ProID4“]},
{“ TransID”:“交易ID2”,“产品ID”:[“ ProID5”,“ ProID6”]}]
所以我从中创建类型struct
type DataRecent []struct {
TransID string `json:"transID"`
ProductID []string `json:"productID"`}
golang代码是
var dataRecent DataRecent
var recent [5]string
for _, Trans := range recent {
if Trans != "" {
var TransID, ProductID string
selectTrans, err := db.Query("select transaction_id, product_id from detail where transaction_id = ?", Trans)
var arr []string
for selectTrans.Next() {
if err != nil {
panic(err.Error())
}
errTrans := selectTrans.Scan(&TransID, &ProductID)
if errTrans != nil {
panic(errTrans.Error())
}
arr = append(arr, ProductID)
}
}
dataRecent.TransID = Trans
dataRecent.ProductID = arr
}
c.JSON(http.StatusOK, gin.H{"status": "success", "message": "Find transactions success", "recent_trans": dataRecent})
defer db.Close()
但是我无法构建代码并出现错误
dataRecent.TransID未定义(类型DataRecent没有字段或方法TransID) dataRecent.ProductID未定义(DataRecent类型没有字段或方法ProductID)
我不知道该怎么办,坚持了一个星期。我是golang的新程序员。请帮我,谢谢
答案 0 :(得分:2)
创建结构时只需删除数组
type DataRecent struct {
TransID string `json:"transID"`
ProductID []string `json:"productID"`
}
然后做
var dataRecent []DataRecent
它将为您工作。
答案 1 :(得分:0)
看起来dataRecent尚未初始化。我建议您使用dataRecent := DataRecent{}
而不是var dataRecent DataRecent
。
其他一些见解:
我不确定您是否省略了最近使用的字符串数组的make
,或者您不知道需要make()
。无论如何,数组是Go中的值,如果您不熟悉Go,我强烈建议您改用slices。 https://blog.golang.org/go-slices-usage-and-internals
此外,我不确定如果发现错误,为什么必须panic()
(用戴夫·切尼(Dave Cheney)的话,panic
的意思是“人类之上的游戏”-{{3 }})