【问题标题】:Serving dynamic length response data提供动态长度响应数据
【发布时间】:2019-02-10 14:56:21
【问题描述】:

我有一个使用 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 。对于我的数据,我没有这个值。因此,不应设置此标头。

【问题讨论】:

标签: go go-gin


【解决方案1】:

我找到了这样做的方法。很简单,把你的回复写给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("]")) }

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-31
    • 2011-09-09
    相关资源
    最近更新 更多