1- # Go File Processor
1+ <div align =" center " >
2+ <h1 >Go File Processor</h1 >
3+ <p >Processamento paralelo e resiliente de arquivos massivos com Worker Pool em Go.</p >
24
3- > Processamento paralelo e resiliente de arquivos massivos com Worker Pool em Go.
5+ < img src = " assets/github-go.png " alt = " Go File Processor Banner " width = " 600px " >
46
5- [ ![ CI] ( https://github.com/ESousa97/go-file-processor/actions/workflows/ci.yml/badge.svg )] ( https://github.com/ESousa97/go-file-processor/actions )
6- [ ![ Go Report Card] ( https://goreportcard.com/badge/github.com/ESousa97/go-file-processor )] ( https://goreportcard.com/report/github.com/ESousa97/go-file-processor )
7- [ ![ CodeFactor] ( https://www.codefactor.io/repository/github/ESousa97/go-file-processor/badge )] ( https://www.codefactor.io/repository/github/ESousa97/go-file-processor )
8- [ ![ Go Reference] ( https://pkg.go.dev/badge/github.com/ESousa97/go-file-processor.svg )] ( https://pkg.go.dev/github.com/ESousa97/go-file-processor )
9- [ ![ License: MIT] ( https://img.shields.io/badge/License-MIT-yellow.svg )] ( https://opensource.org/licenses/MIT )
10- [ ![ Go Version] ( https://img.shields.io/github/go-mod/go-version/ESousa97/go-file-processor )] ( https://github.com/ESousa97/go-file-processor )
11- [ ![ Last Commit] ( https://img.shields.io/github/last-commit/ESousa97/go-file-processor )] ( https://github.com/ESousa97/go-file-processor/commits/main )
7+ <br >
8+
9+ [ ![ CI] ( https://github.com/ESousa97/go-file-processor/actions/workflows/ci.yml/badge.svg )] ( https://github.com/ESousa97/go-file-processor/actions )
10+ [ ![ Go Report Card] ( https://goreportcard.com/badge/github.com/ESousa97/go-file-processor )] ( https://goreportcard.com/report/github.com/ESousa97/go-file-processor )
11+ [ ![ CodeFactor] ( https://www.codefactor.io/repository/github/ESousa97/go-file-processor/badge )] ( https://www.codefactor.io/repository/github/ESousa97/go-file-processor )
12+ [ ![ Go Reference] ( https://pkg.go.dev/badge/github.com/ESousa97/go-file-processor.svg )] ( https://pkg.go.dev/github.com/ESousa97/go-file-processor )
13+ [ ![ License: MIT] ( https://img.shields.io/badge/License-MIT-yellow.svg )] ( https://opensource.org/licenses/MIT )
14+ [ ![ Go Version] ( https://img.shields.io/github/go-mod/go-version/ESousa97/go-file-processor )] ( https://github.com/ESousa97/go-file-processor )
15+ [ ![ Last Commit] ( https://img.shields.io/github/last-commit/ESousa97/go-file-processor )] ( https://github.com/ESousa97/go-file-processor/commits/main )
16+ </div >
1217
1318---
1419
@@ -17,6 +22,7 @@ O **Go File Processor** é uma ferramenta de linha de comando e biblioteca de al
1722## Demonstração
1823
1924### Como Biblioteca
25+ Adicione transformadores e configure o pool de execução de forma fluida:
2026
2127``` go
2228proc := processor.NewCSVToJSONProcessor ()
@@ -29,8 +35,14 @@ config.AddTransformer(processor.FieldMasker("email"))
2935metrics , err := proc.Process (" input.csv" , " output.json" , config)
3036```
3137
32- ### Como CLI (Output)
38+ ### Como CLI
39+ Execute processamentos massivos com métricas em tempo real:
3340
41+ ``` bash
42+ ./fileproc -input data.csv -output data.json -workers 4
43+ ```
44+
45+ Output:
3446``` text
3547[INFO] Iniciando processamento...
3648[INFO] Progresso: 100000 linhas processadas
@@ -42,18 +54,18 @@ metrics, err := proc.Process("input.csv", "output.json", config)
4254
4355## Stack Tecnológico
4456
45- | Tecnologia | Papel |
46- | ------------------- | ------------------------------------------------- |
47- | ** Go** | Linguagem principal (Concorrência nativa) |
48- | ** Worker Pool** | Gerenciamento de paralelismo e carga |
49- | ** slog** | Structured logging para observabilidade |
50- | ** Atomic Counters** | Coleta de métricas sem lock |
51- | ** Channels** | Comunicação segura entre Producer/Worker/ Consumer |
57+ | Tecnologia | Papel |
58+ | ------------| -------|
59+ | ** Go 1.22+ ** | Linguagem principal com concorrência nativa de alta performance |
60+ | ** Worker Pool** | Gerenciamento de paralelismo e controle de carga |
61+ | ** slog** | Structured logging para observabilidade e rastreabilidade |
62+ | ** Atomic Counters** | Coleta de métricas de alta performance sem contenção (lock-free) |
63+ | ** Channels** | Comunicação segura e desacoplada entre Producer, Workers e Consumer |
5264
5365## Pré-requisitos
5466
55- - Go >= 1.22
56- - Make (opcional, para automação)
67+ - ** Go >= 1.22**
68+ - ** Make** ( para automação de build e benchmarks )
5769
5870## Instalação e Uso
5971
@@ -63,12 +75,11 @@ metrics, err := proc.Process("input.csv", "output.json", config)
6375git clone https://github.com/ESousa97/go-file-processor.git
6476cd go-file-processor
6577make build
66- ./fileproc -input data.csv -output data.json -workers 4
6778```
6879
69- ### Geração de Dados de Teste
80+ ### Geração de Dados e Benchmark
7081
71- Para testar performance com arquivos gigantes ( 100k+ linhas) :
82+ Para validar a performance com arquivos de 100k+ linhas:
7283
7384``` bash
7485make generate-data
@@ -77,53 +88,81 @@ make bench
7788
7889## Makefile Targets
7990
80- | Target | Descrição |
81- | --------------- | --------------------------------------------------- |
82- | ` build ` | Compila o binário ` fileproc ` na raiz do projeto |
83- | ` test ` | Executa todos os testes unitários |
84- | ` bench ` | Roda a suíte de benchmarks (Sequencial vs Paralelo) |
85- | ` generate-data ` | Gera arquivo ` large_test.csv ` com 100.000 registros |
86- | ` clean ` | Remove binários e arquivos temporários de teste |
91+ | Target | Descrição |
92+ | --------| -----------|
93+ | ` make build` | Compila o binário ` fileproc ` na raiz do projeto |
94+ | ` make test` | Executa a suíte de testes unitários |
95+ | ` make bench` | Roda comparativos de performance (Sequencial vs Paralelo) |
96+ | ` make generate-data` | Gera arquivo de teste massivo ( 100.000 registros) |
97+ | ` make clean` | Remove binários e arquivos temporários |
8798
8899## Arquitetura
89100
90- O projeto segue uma arquitetura modular focada em streaming de dados:
91-
92- 1 . ** Producer** : Lê o arquivo CSV linha a linha (bufio) e despacha para o canal de jobs.
93- 2 . ** Worker Pool** : Conjunto de goroutines que consomem os jobs, aplicam transformações e validam tipos.
94- 3 . ** Consumer** : Coleta os resultados processados e serializa o JSON final via streaming.
95- 4 . ** Transformation Layer** : Padrão Middleware que permite injetar lógica de filtro e alteração em tempo de execução.
101+ O projeto utiliza um modelo de streaming baseado em canais para processar dados sem carregar o arquivo inteiro na memória.
102+
103+ ``` mermaid
104+ graph LR
105+ Input[CSV Input] --> Producer[Producer]
106+ Producer --> Jobs{Job Channel}
107+ Jobs --> W1[Worker 1]
108+ Jobs --> W2[Worker 2]
109+ Jobs --> WN[Worker N]
110+ W1 & W2 & WN --> Transformers[Transformation Layer]
111+ Transformers --> Results{Result Channel}
112+ Results --> Consumer[Consumer]
113+ Consumer --> Output[JSON Output]
114+
115+ subgraph "Worker Pool"
116+ W1
117+ W2
118+ WN
119+ end
120+ ```
96121
97122## API Reference
98123
99- Veja a documentação completa e exemplos em [ pkg.go.dev] ( https://pkg.go.dev/github.com/ESousa97/go-file-processor ) .
124+ Documentação técnica detalhada disponível em [ pkg.go.dev/github.com/ESousa97/go-file-processor ] ( https://pkg.go.dev/github.com/ESousa97/go-file-processor ) .
100125
101126## Configuração (CLI Flags)
102127
103- | Flag | Descrição | Tipo | Padrão |
104- | ---------- | --------------------------------- | ------ | ------------- |
105- | ` -input ` | Caminho do arquivo CSV de entrada | string | ` input.csv ` |
106- | ` -output ` | Caminho do arquivo JSON de saída | string | ` output.json ` |
107- | ` -workers ` | Número de workers simultâneos | int | ` 4 ` |
128+ | Flag | Descrição | Tipo | Padrão |
129+ | ------| -----------| ------| ---------|
130+ | ` -input ` | Caminho do arquivo CSV de entrada | ` string ` | ` input.csv ` |
131+ | ` -output ` | Caminho do arquivo JSON de saída | ` string ` | ` output.json ` |
132+ | ` -workers ` | Número de workers simultâneos | ` int ` | ` 4 ` |
108133
109134## Roadmap
110135
111- - [x] Implementação core (Worker Pool)
112- - [x] Camada de Transformação (Middleware)
113- - [x] Sistema de Métricas e Logs Estruturados
114- - [x] Benchmarking e Otimização
136+ Acompanhe as etapas de evolução do projeto:
137+
138+ - [x] ** Fase 1: Fundação** — Implementação do Worker Pool e streaming core.
139+ - [x] ** Fase 2: Transformação** — Camada de Middleware (Chain of Responsibility).
140+ - [x] ** Fase 3: Observabilidade** — Métricas atômicas e logs estruturados (` slog ` ).
141+ - [x] ** Fase 4: Governança** — CI/CD, Documentação profissional e Badges.
142+ - [ ] ** Fase 5: Extensibilidade** — Suporte a outros formatos (XML, Parquet).
115143
116144## Contribuindo
117145
118- Contribuições são bem-vindas! Veja o [ CONTRIBUTING.md] ( CONTRIBUTING.md ) para detalhes sobre nosso processo de desenvolvimento .
146+ Interessado em colaborar? Veja nosso [ CONTRIBUTING.md] ( CONTRIBUTING.md ) para padrões de código e processo de PR .
119147
120148## Licença
121149
122- Distribuído sob a licença MIT. Veja ` LICENSE ` para mais informações.
150+ Este projeto está licenciado sob a ** MIT License** — veja o arquivo [ LICENSE] ( LICENSE ) para detalhes.
151+
152+ <div align =" center " >
123153
124154## Autor
125155
126156** Enoque Sousa**
127157
128- - [ Portfólio] ( https://enoquesousa.vercel.app )
129- - [ GitHub] ( https://github.com/ESousa97 )
158+ [ ![ LinkedIn] ( https://img.shields.io/badge/LinkedIn-0077B5?style=flat&logo=linkedin&logoColor=white )] ( https://www.linkedin.com/in/enoque-sousa-bb89aa168/ )
159+ [ ![ GitHub] ( https://img.shields.io/badge/GitHub-100000?style=flat&logo=github&logoColor=white )] ( https://github.com/ESousa97 )
160+ [ ![ Portfolio] ( https://img.shields.io/badge/Portfolio-FF5722?style=flat&logo=target&logoColor=white )] ( https://enoquesousa.vercel.app )
161+
162+ ** [ ⬆ Voltar ao topo] ( #go-file-processor ) **
163+
164+ Feito com ❤️ por [ Enoque Sousa] ( https://github.com/ESousa97 )
165+
166+ ** Status do Projeto:** Ativo — Em constante atualização
167+
168+ </div >
0 commit comments