Pular para o conteúdo

Go 1.18-1.21: Workspace & Toolchain Era

Go 1.18-1.21 trouxeram features revolucionárias de desenvolvimento multi-módulo e gerenciamento de toolchains.

Timeline:

  • Go 1.18: Março 2022 (Workspaces)
  • Go 1.19: Agosto 2022
  • Go 1.20: Fevereiro 2023
  • Go 1.21: Agosto 2023 (Toolchain Management)

Maior feature para módulos!

Trabalhe com múltiplos módulos simultaneamente sem replace hacks.

Janela do terminal
# Antes: Precisava de replace no go.mod
replace github.com/empresa/lib => ../lib
# Agora: Workspace!
go work init ./app ./lib

Arquivo 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

Janela do terminal
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

go list -m -json passou a informar o campo Origin, com dados sobre a origem do módulo quando disponíveis. Essa informação ajuda a entender de onde veio uma versão.

Janela do terminal
go list -m -json rsc.io/quote@v1.5.2

Comentários já eram aceitos no go.mod. A indicação de módulo depreciado com // Deprecated: foi introduzida no Go 1.17.


A flag -C permite mudar de diretório antes de executar um comando:

Janela do terminal
go -C ./app test ./...

O Go 1.20 não removeu GO111MODULE. O modo de módulos é o padrão desde Go 1.16, mas GO111MODULE=off ainda seleciona o modo GOPATH no Go 1.27.


FEATURE REVOLUCIONÁRIA!

Go agora baixa automaticamente a versão correta:

go.mod
go 1.21
toolchain go1.21.5
Janela do terminal
# Você tem Go 1.21.0, com GOTOOLCHAIN=auto
$ go build
go: downloading go1.21.5 (linux/amd64)
# Usa Go 1.21.5 automaticamente!

Variável GOTOOLCHAIN:

Janela do terminal
GOTOOLCHAIN=auto # Padrão: download automático
GOTOOLCHAIN=local # Usar apenas versão instalada
GOTOOLCHAIN=go1.21.5 # Forçar versão específica

Ver capítulo completo: Toolchain Management

module example.com/project
go 1.21
toolchain go1.21.5 // Versão recomendada
require (
github.com/gin-gonic/gin v1.10.0
)

Toolchains são tratados como módulos:

  • Caminho: golang.org/toolchain
  • Respeita GOPROXY
  • Cacheable

A diretiva go passou a ser um requisito mínimo obrigatório. A seleção de toolchains usa esse requisito e a sugestão de toolchain; não é o mesmo algoritmo MVS usado para escolher versões das dependências.

Go 1.19.13+ e Go 1.20.8+ também recusam módulos que exigem Go 1.21 ou superior. Essa verificação foi incorporada às versões anteriores para evitar builds com um toolchain incompatível.


Versão Feature Principal Impacto
1.18 Workspace Mode 🎯 Multi-module dev
1.19 Origem dos módulos em JSON Inspeção de dependências
1.20 Flag -C Execução em outro módulo
1.21 Toolchain Management 🚀 Auto-download

Janela do terminal
# 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 correto
- 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 ./...

Janela do terminal
# 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 ./...
Janela do terminal
# Para projetos multi-módulo
go work init ./module1 ./module2
# Adicionar ao .gitignore
echo "go.work" >> .gitignore
echo "go.work.sum" >> .gitignore

  • Considerar workspace mode para multi-module projects
  • Criar go.work e adicionar ao .gitignore
  • Documentar workflow de workspace no README
  • Conferir a origem dos módulos com go list -m -json
  • Usar a flag -C em scripts quando necessário
  • Usar go work vendor somente a partir do Go 1.22
  • Adicionar diretiva toolchain ao go.mod
  • Configurar GOTOOLCHAIN em CI/CD
  • Testar download automático de toolchains
  • Atualizar documentação de setup


As versões 1.18-1.21 transformaram o workflow de desenvolvimento:

Feature Problema Resolvido
Workspace Desenvolvimento multi-módulo era difícil
Toolchain Versões do Go eram confusas