Изучаю Go, для начала реализую API на основе пакета Gin.
Всё идёт неплохо, но лезут всякие мелочи, которые с ходу не даются.
Имеем структуру:
type User struct {
Id int `json: "id"`
Username string `json: "user_name"`
Displayname string `json: "display_name"`
}
и обработчик HTTP-запроса вида:
router.GET("/mentor/:id", func(c *gin.Context) {
var (
user User
result gin.H
)
id := c.Param("id")
db, _ := c.MustGet("databaseConn").(*sql.DB)
row := db.QueryRow("select user_id, username, displayname from engine4_users where mentor=1 AND user_id = ?;", id)
err := row.Scan(&user.Id, &user.Username, &user.Displayname)
if err != nil {
result = gin.H{"result": nil, "count": 0}
} else {
result = gin.H{"result": user, "count": 1}
}
c.JSON(http.StatusOK, result)
})
В итоге получаем JSON:
{"count":1,"result":{"Id":3,"Username":"andrey","Displayname":"Андрей (admin)"}}
Вопрос - как сделать, чтобы использовались теги структуры и JSON генерировался по ним, то есть строчными буквами:
{"count":1,"result":{"id":3,"user_name":"andrey","display_name":"Андрей (admin)"}}
Для net/http такое реализуется с помощью json.Marshal, а для Gin не могу понять.