Go 1.22-1.25: A era das features modernas
Esta página registra as mudanças até Go 1.25. Para as versões seguintes, veja Go 1.26-1.27: Compatibilidade e manutenção.
Visão geral
Seção intitulada “Visão geral”Go 1.22-1.25 poliu o sistema de módulos com features modernas focadas em produtividade, segurança e gerenciamento de dependências.
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)
Seção intitulada “Go 1.22 (Fevereiro 2024)”🔄 go work vendor
Seção intitulada “🔄 go work vendor”Workspace agora suporta vendoring!
# Criar vendor para o workspace que contém service1 e service2go work vendor
# Build usando vendorgo build -mod=vendor ./service1/... ./service2/...Compatibilidade definida no go.mod
Seção intitulada “Compatibilidade definida no go.mod”Em módulos com go 1.22 ou superior, variáveis declaradas pelo loop passam a ter uma instância por iteração:
// Go ≤ 1.21: Bug clássicofor i := range items { go func() { fmt.Println(i) // Compartilha a variável do loop }()}
// Go ≥ 1.22: Funciona corretamente!for i := range items { go func() { fmt.Println(i) // ✅ Valor correto }()}Go 1.23 (Agosto 2024)
Seção intitulada “Go 1.23 (Agosto 2024)”Conferir o tidy sem editar arquivos
Seção intitulada “Conferir o tidy sem editar arquivos”go mod tidy -diffO comando mostra as alterações necessárias em go.mod e go.sum e retorna status diferente de zero quando há diferenças.
Go 1.24 (Fevereiro 2025)
Seção intitulada “Go 1.24 (Fevereiro 2025)”🛠️ tool directive
Seção intitulada “🛠️ tool directive”FEATURE MUITO ESPERADA!
Finalmente, gerenciamento oficial de ferramentas:
module example.com/project
go 1.25
// Dependências de runtimerequire ( github.com/gin-gonic/gin v1.10.0)
// Ferramentas de desenvolvimentotool ( golang.org/x/tools/cmd/goimports github.com/golangci/golangci-lint/cmd/golangci-lint github.com/swaggo/swag/cmd/swag)Comandos:
# Adicionar ferramentago get -tool github.com/golangci/golangci-lint/cmd/golangci-lint@latest
# Executar ferramentago tool golangci-lint run
# Instalar ferramentasgo install tool # Instala todas no GOBINVer capítulo completo: Tool Dependencies
🔐 GOAUTH - Module Authentication
Seção intitulada “🔐 GOAUTH - Module Authentication”Autenticação para descoberta de módulos via HTTPS e acesso a proxies:
# Arquivo ~/.netrc ou o arquivo indicado por NETRC (padrão)export GOAUTH=netrc
# Credential helper do Git, executado nesse diretório absolutoexport GOAUTH="git /home/gopher/projeto"
# Helper próprioexport GOAUTH="/usr/local/bin/auth-helper"Os métodos podem ser separados por ;. Configure GOPRIVATE para indicar os módulos privados e a autenticação do próprio Git quando o download usar esse VCS.
Ver capítulo: Security Features
Go 1.25 (Agosto 2025)
Seção intitulada “Go 1.25 (Agosto 2025)”🚫 ignore directive
Seção intitulada “🚫 ignore directive”Ignore diretórios ao matching patterns:
module example.com/project
go 1.25
// Ignorar diretórios específicosignore ( ./generated ./examples/legacy deprecated)Uso:
# ./... agora ignora os diretórios especificadosgo build ./...go test ./...Subdiretórios em caminhos personalizados
Seção intitulada “Subdiretórios em caminhos personalizados”Módulos em subdiretórios já eram suportados. A novidade permite indicar esse subdiretório na resposta go-import usada por caminhos personalizados:
<meta name="go-import" content="example.com/lib git https://github.com/org/repo subproject">Aqui, example.com/lib aponta para o diretório subproject do repositório. O import continua usando o caminho do módulo:
import "example.com/lib"🎯 Novo padrão de uso do work
Seção intitulada “🎯 Novo padrão de uso do work”Novo pattern para workspace modules:
# Testa todos os pacotes em TODOS os módulos do workspacego test work
# Build todos os módulos do workspacego build work🔧 Atualizações em toolchain
Seção intitulada “🔧 Atualizações em toolchain”- Toolchain não é mais adicionado automaticamente ao atualizar
goline - Melhor controle de versões
Comparação de features
Seção intitulada “Comparação de features”| Versão | Feature Destaque | Categoria |
|---|---|---|
| 1.22 | go work vendor |
Workflow |
| 1.23 | go mod tidy -diff |
Manutenção do go.mod |
| 1.24 | tool directive + GOAUTH |
Produtividade |
| 1.25 | ignore + work pattern |
Refinamento |
Exemplo de organização no Go 1.25
Seção intitulada “Exemplo de organização no Go 1.25”Trecho de um go.mod
Seção intitulada “Trecho de um go.mod”module github.com/empresa/api
go 1.25
// Dependências de runtimerequire ( github.com/gin-gonic/gin v1.10.0 gorm.io/gorm v1.25.10)
// Dependências indiretasrequire ( github.com/gin-contrib/sse v0.1.0 // indirect // ...)
// Ferramentas de desenvolvimentotool ( golang.org/x/tools/cmd/goimports github.com/golangci/golangci-lint/cmd/golangci-lint github.com/swaggo/swag/cmd/swag)
// Ignorar diretóriosignore ( ./generated ./examples/legacy)O workflow completo
Seção intitulada “O workflow completo”# 1. Setup inicialgo work init ./service1 ./service2
# 2. Baixar deps + ferramentasgo mod download
# 3. Instalar ferramentasgo install tool
# 4. Desenvolvimentogo tool goimports -w .go tool golangci-lint rungo test work # Testa todos os módulos do workspace
# 5. Buildgo build work # Build dos módulos do workspaceMigração para Go 1.24-1.25
Seção intitulada “Migração para Go 1.24-1.25”Preparação
Seção intitulada “Preparação”# 1. Atualizar Gogo install golang.org/dl/go1.25.0@latestgo1.25.0 download
# 2. Atualizar go.modgo1.25.0 get go@1.25.0
# 3. Migrar ferramentasgo get -tool golang.org/x/tools/cmd/goimports@latestgo 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áriogo mod edit -ignore=./generated -ignore=./examples/legacy
# 6. Tidygo mod tidy
# 7. Testargo build ./...go test workConfigurar GOAUTH
Seção intitulada “Configurar GOAUTH”# Para módulos privados, com credenciais já configuradas em ~/.netrcexport GOPRIVATE="github.com/empresa/*"export GOAUTH=netrcChecklist de atualização
Seção intitulada “Checklist de atualização”Go 1.22
Seção intitulada “Go 1.22”- Usar
go work vendorse aplicável - Conferir a compatibilidade ao mudar a diretiva
go
Go 1.23
Seção intitulada “Go 1.23”- Usar
go mod tidy -diffpara conferir os arquivos
Go 1.24
Seção intitulada “Go 1.24”- Migrar para
tooldirective - Configurar
GOAUTHpara repos privados
Go 1.25
Seção intitulada “Go 1.25”- Adicionar
ignoredirective se necessário - Usar
workpattern em workspaces
Recursos adicionais
Seção intitulada “Recursos adicionais”- Go 1.22 Release Notes
- Go 1.23 Release Notes
- Go 1.24 Release Notes
- Go 1.25 Release Notes
- Tool Directive Proposal
- GOAUTH Documentation
Resumo: O estado dos módulos no Go 1.25
Seção intitulada “Resumo: O estado dos módulos no Go 1.25”Go modules em 2025 é maduro, poderoso e produtivo:
Problemas resolvidos
Seção intitulada “Problemas resolvidos”| Problema | Solução (Go 1.25) |
|---|---|
| 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
Seção intitulada “Stack recomendada 2025”Go 1.25├─ Módulos (modo padrão)├─ Workspace (multi-module)├─ Toolchain automático├─ Tool directive (ferramentas)├─ GOAUTH (auth moderna)└─ Lazy loading (performance)