канала типа слайс байт. Если горутина одна все окей. При увеличении их до 2-х Анмаршалинг падает с паникой
"JSON decoder out of sync - data changing underfoot?" Его в принципе нельзя запускать параллельно?...
// Тут запустим анмаршалинг в несколько потоков
for i := 0; i < 2; i++ {
wgGlobal.Add(1)
go func(rc <-chan []byte) {
defer wgGlobal.Done()
for w := range rc {
var res unMarshal
json.Unmarshal(w, &res)
rslt := rawLine{Row: i, Data: res}
jsCh <- rslt
}
}(rawCh)
А что у вас в канале? Может там нечего анмаршалить?
Попробуйте запустить с -race
в канале как положено слайс байт из файла. да гонка есть но в пакете JSON
Попробуйте вывести на печать то, что пытаетесь заанмаршалить, может что-то прояснится
А зачем вы из канала читаете в цикле?
А чем заменить можно?
Да спасибо все так
Можно каждый раз создавать новый слайс Либо сделать sync.Pool из bytes.Buffer и копировать туда, их передавать в канал, а после обработки возвращать в пул
Обсуждают сегодня