1.16-1.17: Lazy Loading Era

Go 1.16 e 1.17 - Era do lazy loading e módulos obrigatórios

Visão geral

As versões Go 1.16 e 1.17 marcam um divisor de águas no ecossistema Go, tornando módulos obrigatórios e introduzindo otimizações revolucionárias de performance.

Timeline:

  • Go 1.16: Fevereiro 2021

  • Go 1.17: Agosto 2021


Go 1.16 (Fevereiro 2021)

🎯 Mudança mais importante: módulos agora são obrigatórios

# GO111MODULE agora ON por padrão
# GOPATH mode descontinuado para novos projetos
GO111MODULE=on  # Padrão (não precisa mais definir!)

Impacto:

  • Todos os novos projetos devem ter go.mod

  • GOPATH ainda funciona para projetos legados

  • Migração para módulos se tornou urgente

🔄 Comandos de Build Não Modificam go.mod

Mudança de comportamento:

Como adicionar dependências agora:

📦 go install com Versões

Novo: instalar programas em versões específicas:

Benefícios:

  • Não polu go.mod do projeto

  • Versões explícitas

  • Isolamento de ferramentas

🚫 Module Retraction

Marque versões problemáticas como não recomendadas:

Ver capítulo: Module Retraction

🔒 GOVCS - Controle de VCS

Proteção contra comandos maliciosos:

📝 Padrão "all" redefinido

🗂️ Embed package

Embute arquivos no binário (não é de módulos, mas importante):

Outras melhorias

  • GOMODCACHE separado de GOPATH

  • Melhorias no vendor

  • go mod download mais robusto

  • Performance geral melhorada


Go 1.17 (Agosto 2021)

🚀 Lazy Module Loading

Revolução de Performance!

Como funciona:

  • Carrega grafo de módulos sob demanda

  • Não carrega tudo upfront

  • Builds muito mais rápidos

Resultados:

  • ⚡ 50% mais rápido em projetos grandes

  • 💾 Menor consumo de memória

  • 📉 go.sum 50% menor

Ver capítulo: Lazy Loading

✂️ Module Graph Pruning

Poda do Grafo de Dependências:

Benefícios:

  • Menos dependências processadas

  • Menos conflitos

  • Grafo mais limpo

📋 Dois blocos de require

Agora go.mod separa deps diretas e indiretas:

Vantagens:

  • Clara distinção

  • Fácil ver o que você realmente usa

  • Melhor legibilidade

🔢 Dependências transitivas explícitas

Go 1.17+ lista todas as deps transitivas:

📊 go mod graph melhorado

🛠️ Mudanças no go get

Outras melhorias

  • go run aceita múltiplos arquivos

  • Melhorias no go mod vendor

  • Performance de compilação melhorada

  • Suporte a novas arquiteturas (ARM64)


Migrando de 1.15 → 1.16 → 1.17

Passo 1: Atualizar para 1.16

Passo 2: Atualizar para 1.17

Verificar mudanças


Checklist de atualização

Para Go 1.16

Para Go 1.17


Recursos adicionais


Resumo: Por que essas versões são importantes?

Feature
Impacto

Módulos obrigatórios (1.16)

🎯 Fim da era GOPATH

Build não modifica go.mod (1.16)

🔒 Builds determinísticos

go install @version (1.16)

🛠️ Ferramentas versionadas

Retraction (1.16)

🚫 Marcar versões ruins

Lazy loading (1.17)

⚡ 50% mais rápido

Graph pruning (1.17)

✂️ Menos conflitos

Dois blocos require (1.17)

📋 Mais legível

circle-check

Last updated