1.18-1.21: Workspace & Toolchain Era
Go 1.18-1.21 - Era do Workspace e Toolchain Management
Visão Geral
Go 1.18-1.21 trouxeram Generics (não relacionado a módulos) e features revolucionárias de desenvolvimento multi-módulo e gerenciamento de toolchains.
Timeline:
Go 1.18: Março 2022 (Generics + Workspaces)
Go 1.19: Agosto 2022
Go 1.20: Fevereiro 2023
Go 1.21: Agosto 2023 (Toolchain Management)
Go 1.18 (Março 2022)
🎯 Workspace Mode
Maior feature para módulos!
Trabalhe com múltiplos módulos simultaneamente sem replace hacks.
# Antes: Precisava de replace no go.mod
replace github.com/empresa/lib => ../lib
# Agora: Workspace!
go work init ./app ./libArquivo go.work:
go 1.18
use (
./app
./library
./tools
)Benefícios:
✅ Desenvolvimento local simplificado
✅ Monorepos mais fáceis
✅ Sem editar go.mod
✅ Cada desenvolvedor tem seu workspace local
Ver capítulo completo: Workspace Mode
🔨 Comandos de Workspace
go work init <dirs...> # Criar workspace
go work use <dir> # Adicionar módulo
go work use -r . # Adicionar recursivamente
go work edit # Editar go.work
go work sync # Sincronizar deps🧬 Generics (Não é de módulos, mas revolucionário)
func Min[T constraints.Ordered](a, b T) T {
if a < b {
return a
}
return b
}Outras melhorias
Fuzzing nativo
Performance de compilação melhorada
go mod initmais inteligente
Go 1.19 (Agosto 2022)
📝 go.mod doc comments
Agora go.mod suporta comentários de documentação:
// Package mymodule provides awesome functionality.
//
// For more information, see https://example.com/docs
module example.com/mymodule
go 1.19
// Production dependencies
require (
github.com/gin-gonic/gin v1.9.1
)🔧 Melhorias no Workspace
go work vendor(experimental)Melhor integração com IDEs
Performance otimizada
🎯 GODEBUG para forward compatibility
Permite controlar comportamento entre versões:
GODEBUG=http2client=0 go run main.goOutras melhorias
Melhorias de segurança
Redução de alocações
Suporte a novas plataformas
Go 1.20 (Fevereiro 2023)
🗑️ GO111MODULE removido
GO111MODULE removido# Não existe mais!
# GO111MODULE=off # ERRO
# GO111MODULE=auto # ERRO
# Módulos são SEMPRE obrigatórios🚀 PGO (Profile-Guided Optimization) Preview
Otimizações baseadas em profiling:
go build -pgo=default
# 3-5% mais rápido em produção!🔄 go.work vendor melhorado
go.work vendor melhorado# Criar vendor para workspace
go work vendorOutras melhorias
Melhores mensagens de erro.
Performance de compilação.
Suporte melhorado a CGO.
Go 1.21 (Agosto 2023)
🎯 Gestão automática da Toolchain
FEATURE REVOLUCIONÁRIA!
Go agora baixa automaticamente a versão correta:
// go.mod
go 1.21
toolchain go1.21.5# Você tem Go 1.20
$ go build
go: downloading go1.21.5 (linux/amd64)
# Usa Go 1.21.5 automaticamente!Variável GOTOOLCHAIN:
GOTOOLCHAIN=auto # Padrão: download automático
GOTOOLCHAIN=local # Usar apenas versão instalada
GOTOOLCHAIN=go1.21.5 # Forçar versão específicaVer capítulo completo: Toolchain Management
🔧 Diretiva toolchain
toolchainmodule example.com/project
go 1.21
toolchain go1.21.5 // Versão recomendada
require (
github.com/gin-gonic/gin v1.10.0
)📦 Toolchains como módulos
Toolchains são tratados como módulos:
Caminho:
golang.org/toolchainRespeita
GOPROXYCacheable
🔄 Min Version Selection para toolchains
MVS agora se aplica a toolchains também!
🎯 go.mod go Line é Obrigatória
go Line é ObrigatóriaVersões antigas (Go 1.19.13+, 1.20.8+) recusam carregar módulos com go line mais nova.
Outras melhorias
Melhorias no
forloop (sem capture issues)min()emax()built-insclear()built-inPerformance geral melhorada
PGO estável (não mais preview)
Comparação de features
1.18
Workspace Mode
🎯 Multi-module dev
1.19
Doc comments
📝 Melhor docs
1.20
GO111MODULE removido
🗑️ Limpeza
1.21
Toolchain Management
🚀 Auto-download
Workflow moderno (Go 1.21+)
Desenvolvimento Local
# 1. Criar workspace para múltiplos módulos
go work init ./service1 ./service2 ./shared
# 2. Toolchain automático garante versão correta
# (Definido em go.mod de cada módulo)
# 3. Desenvolver normalmente
cd service1
go build # Usa workspace + toolchain corretoCI/CD
- uses: actions/setup-go@v5
with:
go-version-file: 'go.mod' # Lê go e toolchain!
# Go baixa toolchain automaticamente se necessário
- run: go build ./...
- run: go test ./...Migração para Go 1.21+
Preparação
# 1. Atualizar Go para 1.21+
# 2. Atualizar go.mod
go mod edit -go=1.21
# 3. Adicionar toolchain (opcional mas recomendado)
go mod edit -toolchain=go1.21.5
# 4. Tidy
go mod tidy
# 5. Testar
go build ./...
go test ./...Setup do Workspace
# Para projetos multi-módulo
go work init ./module1 ./module2
# Adicionar ao .gitignore
echo "go.work" >> .gitignore
echo "go.work.sum" >> .gitignoreChecklist de atualização
Go 1.18
Go 1.19-1.20
Go 1.21
Recursos adicionais
Resumo
As versões 1.18-1.21 transformaram o workflow de desenvolvimento:
Workspace
Desenvolvimento multi-módulo era difícil
Toolchain
Versões do Go eram confusas
PGO
Performance poderia ser melhor
Generics
Type safety sem interfaces vazias
Go 1.21+ com Workspace + Toolchain = Workflow de desenvolvimento moderno e produtivo!
Last updated