Обслуживание динамических данных ответа длины

У меня есть приложение, созданное с помощью 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 ответ

Я нашел такой способ сделать это. Это просто, просто напишите свой ответ на 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 ("]"))}

Но нет хорошего способа справиться с ошибками. Это требует более сложного дизайна

Другие вопросы по тегам