Как использовать golang создать гнездо JSON массива объекта - PullRequest
0 голосов
/ 04 марта 2019

Я пытаюсь выполнить запрос к базе данных и использовать результат запроса для создания json, подобного этому

[{"TransID": "ID транзакции", ProductID ": [" ProID1 "," ProID2 "," ProID3 ","ProID4"]},

{"TransID": "ID транзакции", "ProductID": ["ProID5", "ProID6"]}]

, поэтому я создаю структуру типа из

type DataRecent []struct {
 TransID   string   `json:"transID"`
 ProductID []string `json:"productID"`}

и код Голанга

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 undefined (тип DataRecent не имеетполе или метод TransID) dataRecent.ProductID undefined (тип DataRecent не имеет поля или метода ProductID)

Я не знаю, что делать и застрял с ними на неделю. Я новый программист для ГолангаПомоги мне, пожалуйста, спасибо

Ответы [ 2 ]

0 голосов
/ 04 марта 2019

похоже, что dataRecent не инициализирован.Я предлагаю вам использовать dataRecent := DataRecent{} вместо var dataRecent DataRecent.

некоторые другие идеи: я не уверен, что вы опустили использование make недавнего строкового массива или нетзнай, что тебе нужно make().В любом случае, массивы - это значения в Go, и если вы новичок в Go, я настоятельно рекомендую вместо этого использовать слайсы.https://blog.golang.org/go-slices-usage-and-internals

Кроме того, я не уверен, почему вам нужно panic() на случай, если вы обнаружили ошибку (по словам Дейва Чейни, panic означает «игра над человеком» - https://dave.cheney.net/tag/panic)

0 голосов
/ 04 марта 2019

Просто удалите массив, когда создадите структуру

type DataRecent struct {
 TransID   string   `json:"transID"`
 ProductID []string `json:"productID"`
}

и выполните

var dataRecent []DataRecent

, она будет работать для вас.

...