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 view

Outras melhorias

  • range sobre integers

  • Melhorias 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

FEATURE 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 GOBIN

Ver 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 helper

  • netrc - Arquivo ~/.netrc

  • command - Script customizado

  • off - 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 agora cacheia executáveis:

# Primeira execução: compila
go run main.go  # 2s

# Segunda execução: usa cache
go run main.go  # 0.1s

Outras melhorias

  • Melhorias no PGO

  • Performance geral

  • Suporte a novas plataformas


Go 1.25 (Agosto 2025)

🚫 ignore directive

Ignore 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

Novo 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

Servidor 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 go line

  • Melhor controle de versões

Outras melhorias

  • Performance do compilador

  • Melhorias em generics

  • Suporte a novas arquiteturas

  • Melhorias no runtime


Comparação de features

Versão
Feature Destaque
Categoria

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

module 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 GOMAXPROCS

Migraçã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 work

Configurar 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}"' >> ~/.bashrc

Checklist 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

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

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)

Last updated