O Go File Processor é uma ferramenta de linha de comando e biblioteca de alto desempenho projetada para converter arquivos CSV massivos (milhões de registros) em JSON estruturado de forma eficiente. Utilizando o padrão Worker Pool e processamento via canais (channels), garante o uso otimizado de CPU e memória constante, independentemente do tamanho do arquivo de entrada.
Adicione transformadores e configure o pool de execução de forma fluida:
proc := processor.NewCSVToJSONProcessor()
config := processor.Config{WorkerCount: 8}
// Adicione transformadores (Chain of Responsibility)
config.AddTransformer(processor.EmailFilter(`@company.com$`))
config.AddTransformer(processor.FieldMasker("email"))
metrics, err := proc.Process("input.csv", "output.json", config)Execute processamentos massivos com métricas em tempo real:
./fileproc -input data.csv -output data.json -workers 4Output:
[INFO] Iniciando processamento...
[INFO] Progresso: 100000 linhas processadas
[RESUMO] EXECUÇÃO CONCLUÍDA EM 1.2s
- Total de linhas lidas: 100000
- Processadas com sucesso: 98500
- Erros/Ignoradas: 1500
| Tecnologia | Papel |
|---|---|
| Go 1.22+ | Linguagem principal com concorrência nativa de alta performance |
| Worker Pool | Gerenciamento de paralelismo e controle de carga |
| slog | Structured logging para observabilidade e rastreabilidade |
| Atomic Counters | Coleta de métricas de alta performance sem contenção (lock-free) |
| Channels | Comunicação segura e desacoplada entre Producer, Workers e Consumer |
- Go >= 1.22
- Make (para automação de build e benchmarks)
git clone https://github.com/ESousa97/go-file-processor.git
cd go-file-processor
make buildPara validar a performance com arquivos de 100k+ linhas:
make generate-data
make bench| Target | Descrição |
|---|---|
make build |
Compila o binário fileproc na raiz do projeto |
make test |
Executa a suíte de testes unitários |
make bench |
Roda comparativos de performance (Sequencial vs Paralelo) |
make generate-data |
Gera arquivo de teste massivo (100.000 registros) |
make clean |
Remove binários e arquivos temporários |
O projeto utiliza um modelo de streaming baseado em canais para processar dados sem carregar o arquivo inteiro na memória.
graph LR
Input[CSV Input] --> Producer[Producer]
Producer --> Jobs{Job Channel}
Jobs --> W1[Worker 1]
Jobs --> W2[Worker 2]
Jobs --> WN[Worker N]
W1 & W2 & WN --> Transformers[Transformation Layer]
Transformers --> Results{Result Channel}
Results --> Consumer[Consumer]
Consumer --> Output[JSON Output]
subgraph "Worker Pool"
W1
W2
WN
end
Documentação técnica detalhada disponível em pkg.go.dev/github.com/ESousa97/go-file-processor.
| Flag | Descrição | Tipo | Padrão |
|---|---|---|---|
-input |
Caminho do arquivo CSV de entrada | string |
input.csv |
-output |
Caminho do arquivo JSON de saída | string |
output.json |
-workers |
Número de workers simultâneos | int |
4 |
Acompanhe as etapas de evolução do projeto:
- Fase 1: Fundação — Implementação do Worker Pool e streaming core.
- Fase 2: Transformação — Camada de Middleware (Chain of Responsibility).
- Fase 3: Observabilidade — Métricas atômicas e logs estruturados (
slog). - Fase 4: Governança — CI/CD, Documentação profissional e Badges.
Interessado em colaborar? Veja nosso CONTRIBUTING.md para padrões de código e processo de PR.
Este projeto está licenciado sob a MIT License — veja o arquivo LICENSE para detalhes.
