1.22-1.25: Modern Features Era
Go 1.22-1.25 - Features Modernas (Tool Dependencies, GOAUTH, Telemetria)
Visão geral
Go 1.22-1.25 poliu o sistema de módulos com features modernas focadas em produtividade, segurança e observabilidade.
Timeline:
Go 1.22: Fevereiro 2024
Go 1.23: Agosto 2024
Go 1.24: Fevereiro 2025
Go 1.25: Agosto 2025
Go 1.22 (Fevereiro 2024)
🔄 go work vendor
Workspace agora suporta vendoring!
# Criar vendor para workspace inteiro
go work vendor
# Build usando vendor
go build -mod=vendor ./...🔧 for loop "fix"
Finalmente! Variáveis de loop não vazam:
// Go ≤ 1.21: Bug clássico
for i := range items {
go func() {
fmt.Println(i) // ❌ Sempre imprime último valor
}()
}
// Go ≥ 1.22: Funciona corretamente!
for i := range items {
go func() {
fmt.Println(i) // ✅ Valor correto
}()
}📊 Improved telemetry support
Go agora coleta telemetria (opt-in) para melhorar o Go:
# Opt-in
go telemetry on
# Opt-out (padrão)
go telemetry off
# Ver dados coletados
go telemetry viewOutras melhorias
rangesobre integersMelhorias de performance
Melhor suporte a WASM
Go 1.23 (Agosto 2024)
🎯 Improved Module Graph Resolution
Resolução de dependências mais eficiente e correta.
🔐 Enhanced Security Features
Melhorias no checksum database e proteções adicionais.
📦 Better Workspace Integration
Workspaces agora integram melhor com todas as ferramentas.
Outras melhorias
Iterator support (experimental)
Performance de garbage collector
Melhorias no compilador
Go 1.24 (Fevereiro 2025)
🛠️ tool directive
tool directiveFEATURE MUITO ESPERADA!
Finalmente, gerenciamento oficial de ferramentas:
// go.mod
module example.com/project
go 1.25
// Dependências de runtime
require (
github.com/gin-gonic/gin v1.10.0
)
// Ferramentas de desenvolvimento
tool (
golang.org/x/tools/cmd/goimports
github.com/golangci/golangci-lint/cmd/golangci-lint
github.com/swaggo/swag/cmd/swag
)Comandos:
# Adicionar ferramenta
go get -tool github.com/golangci/golangci-lint/cmd/golangci-lint@latest
# Executar ferramenta
go tool golangci-lint run
# Instalar ferramentas
go install tool # Instala todas no GOBINVer capítulo completo: Tool Dependencies
🔐 GOAUTH - Module Authentication
Sistema moderno de autenticação para módulos privados:
# GitHub
export GOAUTH="github.com/empresa=git:echo username=token:$GITHUB_TOKEN"
# GitLab
export GOAUTH="gitlab.empresa.com=netrc"
# Custom
export GOAUTH="git.empresa.com=command:/usr/local/bin/auth-helper"Provedores suportados:
git- Git credential helpernetrc- Arquivo ~/.netrccommand- Script customizadooff- Desabilita autenticação
Ver capítulo: Security Features
📋 Structured Output (-json flags)
Muitos comandos agora suportam -json:
# go list com JSON
go list -json -m all
# go build com JSON
go build -json ./...
# go test com JSON
go test -json ./...Benefícios:
Parsing fácil em scripts
Integração com ferramentas
CI/CD mais robusto
🔄 go run caching
go run cachinggo run agora cacheia executáveis:
# Primeira execução: compila
go run main.go # 2s
# Segunda execução: usa cache
go run main.go # 0.1sOutras melhorias
Melhorias no PGO
Performance geral
Suporte a novas plataformas
Go 1.25 (Agosto 2025)
🚫 ignore directive
ignore directiveIgnore diretórios ao matching patterns:
// go.mod
module example.com/project
go 1.25
// Ignorar diretórios específicos
ignore (
testdata
_examples
deprecated
)Uso:
# ./... agora ignora os diretórios especificados
go build ./...
go test ./...📁 Suporte a subdiretórios de módulo
Módulos agora podem estar em subdiretórios de repos:
github.com/org/repo
├── go.mod (root module)
└── subproject/
└── go.mod (submodule!)Sintaxe:
import "github.com/org/repo/subproject@subdirectory"🎯 Novo padrão de uso do work
workNovo pattern para workspace modules:
# Testa todos os pacotes em TODOS os módulos do workspace
go test work
# Build todos os módulos do workspace
go build work📊 go doc -http
go doc -httpServidor de documentação integrado:
# Iniciar servidor de docs
go doc -http :8080
# Abre automaticamente no browser
# Mostra docs de todos os módulos do workspace🐳 Container-Aware GOMAXPROCS
Go agora detecta limites de containers (Kubernetes, Docker):
// Antes: GOMAXPROCS = número de CPUs na máquina (ex: 96)
// Mesmo se container limitado a 2 CPUs!
// Go 1.25: GOMAXPROCS = CPUs do container (ex: 2)
// Automaticamente!Benefícios:
Melhor performance em Kubernetes
Menos contenção
Uso otimizado de recursos
🗑️ Green Tea Garbage Collector (Experimental)
Novo GC experimental com pausas ainda menores:
GOEXPERIMENT=greentea go build🔧 Atualizações em toolchain
Toolchain não é mais adicionado automaticamente ao atualizar
golineMelhor controle de versões
Outras melhorias
Performance do compilador
Melhorias em generics
Suporte a novas arquiteturas
Melhorias no runtime
Comparação de features
1.22
go work vendor
Workflow
1.23
Telemetria
Observability
1.24
tool directive + GOAUTH
Produtividade
1.25
ignore + work pattern
Refinamento
Stack moderna (Go 1.25)
Um go.mod completo
go.mod completomodule github.com/empresa/api
go 1.25
// Dependências de runtime
require (
github.com/gin-gonic/gin v1.10.0
gorm.io/gorm v1.25.10
)
// Dependências indiretas
require (
github.com/gin-contrib/sse v0.1.0 // indirect
// ...
)
// Ferramentas de desenvolvimento
tool (
golang.org/x/tools/cmd/goimports
github.com/golangci/golangci-lint/cmd/golangci-lint
github.com/swaggo/swag/cmd/swag
)
// Ignorar diretórios
ignore (
testdata
_examples
)O workflow completo
# 1. Setup inicial
go work init ./service1 ./service2
# 2. Baixar deps + ferramentas
go mod download
# 3. Instalar ferramentas
go install tool
# 4. Desenvolvimento
go tool goimports -w .
go tool golangci-lint run
go test work # Testa todos os módulos do workspace
# 5. Build
go build ./... # Usa container-aware GOMAXPROCSMigração para Go 1.24-1.25
Preparação
# 1. Atualizar Go
go install golang.org/dl/go1.25@latest
go1.25 download
# 2. Atualizar go.mod
go mod edit -go=1.25
go mod edit -toolchain=go1.25.0
# 3. Migrar ferramentas
go get -tool golang.org/x/tools/cmd/goimports@latest
go get -tool github.com/golangci/golangci-lint/cmd/golangci-lint@latest
# 4. Remover tools.go (se existir)
rm tools.go
# 5. Adicionar ignore se necessário
go mod edit -ignore=testdata -ignore=_examples
# 6. Tidy
go mod tidy
# 7. Testar
go build ./...
go test workConfigurar GOAUTH
# Para módulos privados
export GOAUTH="github.com/empresa=git:echo username=token:${GITHUB_TOKEN}"
# Adicionar ao ~/.bashrc ou ~/.zshrc
echo 'export GOAUTH="github.com/empresa=git:echo username=token:${GITHUB_TOKEN}"' >> ~/.bashrcChecklist de atualização
Go 1.22
Go 1.23
Go 1.24
Go 1.25
Recursos adicionais
Resumo: O estado atual (Go 1.25)
Go modules em 2025 é maduro, poderoso e produtivo:
Problemas resolvidos
Gerenciar ferramentas
✅ tool directive
Autenticação privada
✅ GOAUTH
Multi-module dev
✅ Workspace mode
Versões do Go
✅ Toolchain management
Performance
✅ Lazy loading + pruning
Segurança
✅ GOVCS + Checksum DB + GOAUTH
Stack recomendada 2025
Go 1.25
├─ Módulos (obrigatórios)
├─ Workspace (multi-module)
├─ Toolchain automático
├─ Tool directive (ferramentas)
├─ GOAUTH (auth moderna)
├─ Lazy loading (performance)
└─ Container-aware (K8s)Go 1.25 representa o ápice de 7 anos de evolução do sistema de módulos. É robusto, seguro, rápido e um prazer de usar!
Last updated