Чтобы уменьшить использование памяти и уменьшить задержку, я хочу начать обработку json-объектов, возвращенных в HTTP-ответе, прежде чем они будут отправлены.Я пытаюсь написать метод на своем клиенте веб-службы, который будет запрашивать веб-службу, возвращая канал, который будет передавать структуры из веб-запроса по мере их выхода из потока.
func (c *Client) GetMyObj() (<-chan models.MyObj, <-chan error) {
outChan := make(chan models.MyObj)
errChan := make(chan error)
go func() {
resp, err := httpClient.Get(c.ServiceUrl, "text/plain;charset=UTF-8", nil)
if err != nil {
errChan <- err
return
}
if resp.Status != "200 OK" {
errChan <- fmt.Errorf("http error: %1", resp.Status)
return
}
dec := json.NewDecoder(resp.Body)
for dec.More() {
myO:= models.MyObj{}
err := dec.Decode(&MyO)
if err != nil {
errChan <- err
return
}
outChan <- dfe
}
}()
return outChan, errChan
}
К сожалению, это вызывает исключение, когда он читает предыдущую открывающую квадратную скобку. Документ json будет выглядеть примерно так, как показано ниже, но с большим количеством объектов в массиве и большим количеством свойств объекта, но вы получитеидея:
[{"name":"Value"}
,{"name":"Value"}
,{"name":"Value"}]