FubanGo 🚫✨
fubango
substantivo masculino [informal, gíria]
feminino: fubanga
-
Pessoa e/ou coisa considerada desprovida de graça, desajeitada ou de aparência descuidada.
Ser humano de estética duvidosa, dono de um visual que parece ter sido montado às pressas durante um apagão.
“O cara era todo fubango, mas tinha um bom coração.”
“O bicho apareceu todo fubango na festa, com a camisa florida laranja e papete do Gustavo Kuerten azul.”
-
Indivíduo tido como cafona ou de gosto duvidoso no modo de se vestir ou se comportar.
Pessoa com gosto peculiar, que acredita piamente que brilho combina com oncinha e perfume forte é sinal de respeito.
“Aquele terno amarelo ficou muito fubango.”
“A fubanga chegou iluminando o bar inteiro com aquele salto de acrílico.”
Etimologia: origem incerta; possivelmente criação popular de tom zombeteiro, associada à sonoridade expressiva. Talvez inventada num boteco entre um gole e outro, quando alguém precisava de uma palavra pra descrever o indescritível.
Sinônimos: brega, cafona, feioso, desengonçado, bagaceiro (pop.).
Antônimos: estiloso, elegante, bonito.
FubanGo é um repositório educacional que ensina Golang através de anti-padrões e exemplos negativos.
Propósito
Este projeto tem como objetivo ensinar Golang de uma maneira única: mostrando primeiro como não fazer as coisas. Para cada conceito, apresentamos:
- Um problema a ser resolvido;
- Uma implementação propositalmente ruim;
- Análise detalhada de por que a implementação é problemática;
- A forma correta de implementação;
- Comparação entre as duas abordagens.
Estrutura do Projeto
/exemplos
/01-basicos
/variaveis
/estruturas-de-controle
/funcoes
/02-intermediario
/error-handling
/concorrencia
/interfaces
/03-avancado
/goroutines
/channels
/context
/04-casos-reais
/api-design
/database
/testes
Cada diretório contém:
ruim.go - Implementação propositalmente ruim
analise.md - Análise detalhada dos problemas
bom.go - Implementação seguindo as melhores práticas
benchmark_test.go - Testes de performance (quando aplicável)
Como Usar
- Leia o problema proposto
- Analise o código ruim em
ruim.go
- Leia a análise detalhada em
analise.md
- Compare com a solução correta em
bom.go
- Execute os benchmarks para ver a diferença de performance
Índice de Anti-Padrões Documentados
📁 01-Básicos
- Nomes de Variáveis Não Descritivos -
ruim.go:7
- Não Aproveitando Inferência de Tipo -
ruim.go:11
- Declarações Redundantes -
ruim.go:17
- Variáveis Não Utilizadas -
ruim.go:22
- Escopo Global Desnecessário -
ruim.go:26
- Conversões Desnecessárias -
ruim.go:30
- Shadowing de Variáveis -
ruim.go:35
- Valores Mágicos -
ruim.go:42
- Falta de Agrupamento Lógico -
ruim.go:47
- If's Aninhados Excessivamente -
ruim.go:7
- Switch Mal Estruturado -
ruim.go:19
- For com Continue/Break Desnecessários -
ruim.go:33
- Loop Infinito com Break -
ruim.go:47
- Range com Índice Não Utilizado -
ruim.go:61
- Condições Complexas -
ruim.go:67
- Muitos Parâmetros e Retornos -
ruim.go:9
- Uso de Variáveis Globais -
ruim.go:7
- Código Repetitivo -
ruim.go:23
- Função que Faz Muitas Coisas -
ruim.go:34
- Recursão Mal Implementada -
ruim.go:53
- Tratamento de Erros Ignorado -
ruim.go:60
- Função Anônima Complexa -
ruim.go:66
📁 02-Intermediário
- Ignorar Erros -
ruim.go:10
- Uso Inadequado de Panic -
ruim.go:18
- Erros Genéricos -
ruim.go:25
- Perda de Contexto -
ruim.go:34
- Mistura de Erros e Logs -
ruim.go:43
- Falta de Agrupamento de Erros -
ruim.go:51
- Recover Indiscriminado -
ruim.go:64
- Race Conditions -
ruim.go:9
- Deadlocks -
ruim.go:21
- Goroutine Leaks -
ruim.go:44
- Uso Incorreto de Canais -
ruim.go:53
- Compartilhamento sem Sincronização -
ruim.go:63
- Select Mal Implementado -
ruim.go:75
- WaitGroup Mal Usado -
ruim.go:91
- Mutex por Valor -
ruim.go:104
- Interface Grande e Não Coesa -
ruim.go:7
- Exposição de Detalhes de Implementação -
ruim.go:16
- Dependência de Tipos Concretos -
ruim.go:24
- Violação do ISP -
ruim.go:33
- Uso Excessivo de interface{} -
ruim.go:48
- Erro Personalizado Incorreto -
ruim.go:54
- Container Genérico Ruim -
ruim.go:65
- Embedding Excessivo -
ruim.go:75
📁 03-Avançado
- Goroutines Sem Controle de Término -
ruim.go:11
- Compartilhamento de Variáveis da Closure -
ruim.go:21
- Número Excessivo de Goroutines -
ruim.go:32
- Comunicação Através de Variáveis Compartilhadas -
ruim.go:41
- Vazamento de Goroutines em Loops -
ruim.go:58
- Panic em Goroutine Sem Recuperação -
ruim.go:69
- CPU-Bound com Muitas Goroutines -
ruim.go:82
- Sincronização Incorreta com WaitGroup -
ruim.go:96
- Deadlock com Canais -
ruim.go:110
- Ordem de Execução Não Garantida -
ruim.go:120
- Timeout Mal Implementado -
ruim.go:132
- Recurso Compartilhado Sem Proteção -
ruim.go:146
- Canal Sem Buffer Quando Necessário -
ruim.go:9
- Fechamento Múltiplo -
ruim.go:21
- Envio para Canal Fechado -
ruim.go:35
- Select Bloqueante -
ruim.go:48
- Canal Compartilhado -
ruim.go:58
- Direção Não Especificada -
ruim.go:72
- Loop Infinito -
ruim.go:78
- Range Sem Fechamento -
ruim.go:90
- Uso de Timer Sem Cancelamento -
ruim.go:9
- Operação Bloqueante Sem Context -
ruim.go:19
- Ignorar Função Cancel de Context -
ruim.go:27
- Context Como Interface Genérica -
ruim.go:36
- Passar Context por Cópia Incorreta -
ruim.go:42
📁 04-Casos Reais
- Side-Effects em Endpoints GET -
ruim.go:11
- Vazamento de Dados Sensíveis -
ruim.go:20
- Falta de Autenticação e Autorização -
ruim.go:43
- Mistura de Responsabilidades -
ruim.go:51
- Falta de Versionamento -
ruim.go:72
- Ausência de Contratos Claros -
ruim.go:79
- Falta de Tratamento de Erros Consistente -
ruim.go:85
- Abrir e Fechar Conexão Por Requisição -
ruim.go:11
- SQL Injection por Concatenação de Strings -
ruim.go:21
- Ignorar Erros de Operações de Banco -
ruim.go:31
- Transação Sem Rollback em Caso de Erro -
ruim.go:47
- Falta de Context com Timeout -
ruim.go:64
- Não Usar Prepared Statements -
ruim.go:73
- Ausência de Migrations e Versionamento de Schema -
ruim.go:80
- Testes Dependentes de Ordem e Estado Global -
ruim.go:11
- Testes Lentos Sem Mocks -
ruim.go:25
- Uso de Sleep em Testes -
ruim.go:43
- Falta de Assertions e Validações -
ruim.go:59
- [Testes Não Isolados (Sem