Nesta edição, uma imersão nos internals do Go: por que um milhão de entradas num map ocupam 38MB e não 16MB, como o Go 1.27 acelerou alocações pequenas com funções especializadas, e por que rodar swap em produção pode causar pausas de 40ms no GC. Também tem a proposta do Go Collections Working Group para o Go 1.28, o Rune IDE abrindo o código-fonte e dois projetos para resolver o eterno problema do Set em Go — um já estabelecido, outro chegando na stdlib.
Links
Proposta do Go Team para 1.28: Set, Map ordenado e heap genérico na stdlib
O Go Collections Working Group publicou uma proposta para o Go 1.28 com novos pacotes de coleção genérica: container/set.Set[T], map com hash customizável, map ordenado via árvore e um heap v2 com API simplificada. Vale ler agora para acompanhar o debate antes de a proposta ser aceita.
Size-Specialized Memory Allocation
Post oficial do Go Blog explicando a otimização mais transparente do Go 1.27: para alocações de até 80 bytes, o runtime agora usa funções especializadas por classe de tamanho, que podem ser 20-30% mais rápidas. O mais interessante é que você não precisa fazer nada para aproveitar: basta compilar com Go 1.27 ;)
A 40ms Go GC pause caused by swap
Quando o kernel envia páginas de metadados do GC para o swap, o pause stop-the-world, que costuma durar 51 µs, pode chegar a 40 ms! Entenda o motivo neste post.
A Million Go Map Entries Take 38MB, Not 16MB
Se um map[int64]int64 deveria custar 16 bytes por entrada (8 de chave, 8 de valor), então por que um milhão de entradas ocupa 38MB e nao 16MB? O autor foi investigar e encontrou uma resposta muito mais interessante do que esperava. Indispensável para quem trabalha com maps grandes em produção.
Rune is now open source
O Rune, IDE nativo com renderização por GPU, interface keyboard-driven e agente de IA integrado, escrito principalmente em Go, abriu o código-fonte sob a licença GPLv3. O detalhe interessante de governança: os contribuidores retêm o copyright do que submetem, e a empresa prepara um programa de revenue-sharing com a comunidade. Para quem quer uma alternativa nativa ao VSCode e ao Zed.
deckarep/golang-set
Essa é a biblioteca de Set genérico mais adotada do ecossistema Go (usada por Docker, 1Password, Ethereum e Hashicorp) com versões thread-safe e não-safe, operações de união, interseção, diferença e suporte a iterators do Go 1.23. Vale ter no radar agora que o Go Collections Working Group está desenhando o container/set oficial: a API deste projeto é uma boa referência do que a comunidade já espera de um Set.


