提供动态长度响应数据

时间:2019-02-10 14:56:21

标签: go gin-gonic

我有一个使用gin-gonic和golang创建的应用程序。该应用程序根据请求返回JSON。 我的JSON是一些结构的数组。我已经逐一创建了结构,当所有准备就绪时,我会使用c.String

进行输出
func getData(c *gin.Context) {
    jsondoc, err := GetData()

    if err != nil {
        handleError(c, err)
        return
    }
    c.Header("Content-Type", "application/json; charset=utf-8")
    c.String(200, jsondoc)
}

我想做一些优化。当尚未准备好完整的JSON时,我想开始向用户发送数据。当我拥有JSON的第一门艺术时,我可以开始发送到客户端浏览器。

有可能吗?将某个阅读器界面返回给gin-gonic,它将从中读取直到打开?

更新。有功能DataFromReader。例如https://gin-gonic.com/api-example/serving-data-from-reader/。 但这需要设置Content-Length。对于我的数据,我没有这个价值。因此,不应设置此标头。

1 个答案:

答案 0 :(得分:0)

我已经找到了这样做的方法。很简单,只需将您的回复写到c.Writer

func getData(c *gin.Context) {
    c.Statue(200)
    c.Header("Content-Type", "application/json; charset=utf-8")
    GetData(c.Writer)
}
func GetData(res io.Writer) {
    res.Write([]byte("["))
    res.Write(moreBytes)
    res.Write(moreBytes2)

...         res.Write([] byte(“]”))     }

但是没有处理错误的好方法。这需要更棘手的设计