Я новичок в SWE, изучаю Go (и люблю его).
Я создаю парсер для файлов дампа Википедии - в основном огромный XML-файл, сжатый bzip2 (~ 50 ГБ без сжатия).
Я хочу выполнять как потоковую декомпрессию, так и синтаксический анализ, что звучит достаточно просто. Для декомпрессии я делаю:
inputFilePath := flag.Arg(0)
inputReader := bzip2.NewReader(inputFile)
А затем передайте считыватель парсеру XML:
decoder := xml.NewDecoder(inputFile)
Однако, поскольку распаковка и синтаксический анализ являются дорогостоящими операциями, я хотел бы, чтобы они выполнялись в отдельных подпрограммах Go, чтобы использовать дополнительные ядра. Как мне это сделать в Go?
Единственное, о чем я могу думать, это обернуть файл в chan []byte и реализовать интерфейс io.Reader, но я предполагаю, что может быть встроенный (и более чистый) способ сделать это.
Кто-нибудь когда-нибудь делал что-то подобное?
Спасибо! Мануэль