Самый простой способ вернуть буквальный JSON с помощью gin gonic - PullRequest
1 голос
/ 19 июня 2019

Я учусь Go, создав простой API-интерфейс для веб-сервера.Я хочу вернуть простое сообщение в формате JSON, когда используется маршрут по умолчанию.

Пока что, читая онлайн, это самый простой способ вернуть буквальную строку JSON, кодировать и отправить ее пользователю..

func GetDefault(c *gin.Context)  {
    jsonData := []byte(`{"msg":"this worked"}`)

    var v interface{}
    json.Unmarshal(jsonData, &v)
    data := v.(map[string]interface{})  

    c.JSON(http.StatusOK,data)
}

Это самый эффективный / быстрый способ сделать это?

в файле node.js и выразить, я бы сделал что-то вроде:

return res.status(200).json({"msg":"this worked"});

Какой лучший способ сделать это в Go + Gin?

Ответы [ 2 ]

3 голосов
/ 19 июня 2019

Один из вариантов - использовать Context.Data(), когда вы предоставляете данные для отправки (вместе с типом контента):

func GetDefault(c *gin.Context)  {
    jsonData := []byte(`{"msg":"this worked"}`)

    c.Data(http.StatusOK, "application/json", jsonData)
}

Вы также можете использовать константу для контентавведите:

func GetDefault(c *gin.Context)  {
    jsonData := []byte(`{"msg":"this worked"}`)

    c.Data(http.StatusOK, gin.MIMEJSON, jsonData)
}

Если ваши данные доступны как значение string и имеют большой размер, вы можете избежать преобразования их в []byte, если используете Context.DataFromReader():

func GetDefault(c *gin.Context) {
    jsonStr := `{"msg":"this worked"}`

    c.DataFromReader(http.StatusOK,
        int64(len(jsonStr)), gin.MIMEJSON, strings.NewReader(jsonStr), nil)
}

Это решение также работает, если у вас есть JSON как io.Reader, например, os.File.

2 голосов
/ 19 июня 2019

вы можете использовать структуру gin.H в ответе:

c.JSON(http.StatusOK, gin.H{"msg":"this worked"})
...