A Semana Go - Edição Nº 162
Nesta edição, oscilamos entre a nostalgia dos consoles clássicos e a vanguarda controversa do gerenciamento de memória. Temos críticas contundentes sobre funcionalidades abandonadas, padrões práticos para a nova era dos iteradores e, claro, ferramentas para quem se recusa a reiniciar servidores manualmente. Preparem-se para código que roda no Nintendo 64 e propostas que prometem limpar o seu tratamento de erros.
Links
Soppo: O Go com esteroides (e enums)
Se você já se pegou desejando funcionalidades de outras linguagens em Go, o Soppo é para você. Trata-se de uma linguagem que transpila para Go, adicionando tudo aquilo que pedimos ao Papai Noel e não recebemos: Enums verdadeiros (tagged unions), pattern matching exaustivo, propagação de erros com um operador ? e nil safety em tempo de compilação. É um projeto experimental fascinante que mostra como a ergonomia do Go poderia evoluir se a simplicidade não fosse o dogma supremo.
Para quem acha que embedded se resume a Arduinos, Timur Çelik mostra como rodar Go em um Nintendo 64. O artigo é um guia prático que utiliza o EmbeddedGo e o target mips64 para desenhar na tela, ler comandos do controle e até reproduzir áudio. Mais do que uma curiosidade retrô, é uma demonstração impressionante da versatilidade do runtime e do compilador em hardware limitado.
A oportunidade perdida das arenas
Uma leitura provocadora de Andrew Vittiglio sobre o cancelamento da experiência com “memory arenas” pelo Google. O autor argumenta que, ao rejeitar o gerenciamento manual de memória em favor da simplicidade e segurança (evitando APIs “infecciosas” e use-after-free), o Go limitou seu teto de performance. A tese é que a linguagem corre o risco de perder o “terreno do meio”, ficando imprensada entre a velocidade do Rust/C++ e a facilidade do Python/TS.
Padrões práticos para iteradores
Agora que a poeira sobre a introdução de iteradores baixou, começam a surgir os padrões de uso real. O time da FunnelStory compartilha como estão usando iter.Seq2 para lidar com erros de forma elegante e, crucialmente, como utilizar iter.Pull para converter iteradores baseados em push para interfaces baseadas em pull (como Next()), resolvendo problemas de integração com streams sem a complexidade de canais e goroutines extras.
Uma pequena vitória para a ergonomia: a proposta errors.AsType foi aceita. O artigo de Anton Zhiyanov explica como essa função genérica irá substituir a sintaxe verbosa e propensa a erros do errors.As. Em vez de declarar variáveis e passar ponteiros, poderemos finalmente fazer verificações de tipo de forma direta e segura, economizando linhas e dores de cabeça.
Uma reflexão sobre a “micro-interrupção” no fluxo de desenvolvimento. Dor Moshe discute o custo cognitivo de parar e reiniciar o servidor manualmente após cada alteração e explora ferramentas de hot reload (como o Air) que automatizam esse processo. Parece trivial, mas o ganho acumulado em sanidade mental e tempo ao fim do dia é substancial.
Uma análise sobre a arquitetura de extensibilidade em Go. O artigo de Skoredin explora as nuances de criar sistemas modulares, navegando pelas limitações do pacote nativo plugin e as alternativas mais robustas, como sistemas baseados em RPC (a abordagem preferida pela HashiCorp), permitindo que aplicações Go sejam estendidas de forma segura e desacoplada.
Uma ferramenta da Fillmore Labs para os obcecados por limpeza de código. O scopeguard é um linter que verifica se as variáveis são declaradas no escopo mais reduzido possível. A ideia é simples: se uma variável só é usada dentro de um if, ela deve ser declarada dentro desse if. Uma prática que reduz a carga cognitiva e previne bugs sutis de shadowing.


