Обслуживание динамических данных ответа длины - PullRequest
0 голосов
/ 10 февраля 2019

У меня есть приложение, созданное с помощью 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 / serve-data-from-reader / .Но для этого необходимо установить Content-Length.Для моих данных у меня нет этого значения.Таким образом, этот заголовок не должен быть установлен.

1 Ответ

0 голосов
/ 11 февраля 2019

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

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

...