使用gin gonic返回文字JSON的最简单方法

时间:2019-06-19 09:24:53

标签: go server gin-gonic

我正在通过为Web服务器构建简单的API接口来学习Go。当您点击默认路由时,我想以JSON返回一条简单消息。

到目前为止,在线阅读是返回文字JSON字符串并将其编码并发送给用户的最简单方法。

<system.web>
    <httpRuntime executionTimeout="600" /> <!--10 min-->
...

这是最有效/最快的方法吗?

在node.js中并表示,我会做类似的事情:

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)
}

在Go + Gin中最好的方法是什么?

2 个答案:

答案 0 :(得分:3)

一种选择是使用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值可用并且很大,那么如果您使用Context.DataFromReader(),则可以避免将其转换为[]byte

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

答案 1 :(得分:2)

您可以在响应中使用gin.H结构:

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