Go 1.18-1.21: Workspace & Toolchain Era
Visão Geral
Seção intitulada “Visão Geral”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)
Go 1.18 (Março 2022)
Seção intitulada “Go 1.18 (Março 2022)”Workspace Mode
Seção intitulada “Workspace Mode”Maior feature para módulos!
Trabalhe com múltiplos módulos simultaneamente sem replace hacks.
# Antes: Precisava de replace no go.modreplace 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
Seção intitulada “🔨 Comandos de Workspace”go work init <dirs...> # Criar workspacego work use <dir> # Adicionar módulogo work use -r . # Adicionar recursivamentego work edit # Editar go.workgo work sync # Sincronizar depsGo 1.19 (Agosto 2022)
Seção intitulada “Go 1.19 (Agosto 2022)”Requisitos de dependências em Go 1.19
Seção intitulada “Requisitos de dependências em Go 1.19”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.
go list -m -json rsc.io/quote@v1.5.2Comentários já eram aceitos no go.mod. A indicação de módulo depreciado com // Deprecated: foi introduzida no Go 1.17.
Go 1.20 (Fevereiro 2023)
Seção intitulada “Go 1.20 (Fevereiro 2023)”Comando go em outro diretório
Seção intitulada “Comando go em outro diretório”A flag -C permite mudar de diretório antes de executar um comando:
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.
Go 1.21 (Agosto 2023)
Seção intitulada “Go 1.21 (Agosto 2023)”🎯 Gestão automática da Toolchain
Seção intitulada “🎯 Gestão automática da Toolchain”FEATURE REVOLUCIONÁRIA!
Go agora baixa automaticamente a versão correta:
go 1.21toolchain go1.21.5# Você tem Go 1.21.0, com GOTOOLCHAIN=auto$ go buildgo: downloading go1.21.5 (linux/amd64)# Usa Go 1.21.5 automaticamente!Variável GOTOOLCHAIN:
GOTOOLCHAIN=auto # Padrão: download automáticoGOTOOLCHAIN=local # Usar apenas versão instaladaGOTOOLCHAIN=go1.21.5 # Forçar versão específicaVer capítulo completo: Toolchain Management
🔧 Diretiva toolchain
Seção intitulada “🔧 Diretiva toolchain”module example.com/project
go 1.21toolchain go1.21.5 // Versão recomendada
require ( github.com/gin-gonic/gin v1.10.0)📦 Toolchains como módulos
Seção intitulada “📦 Toolchains como módulos”Toolchains são tratados como módulos:
- Caminho:
golang.org/toolchain - Respeita
GOPROXY - Cacheable
Requisito mínimo na linha go
Seção intitulada “Requisito mínimo na linha go”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.
Comparação de features
Seção intitulada “Comparação de features”| 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 |
Workflow moderno (Go 1.21+)
Seção intitulada “Workflow moderno (Go 1.21+)”Desenvolvimento Local
Seção intitulada “Desenvolvimento Local”# 1. Criar workspace para múltiplos módulosgo work init ./service1 ./service2 ./shared
# 2. Toolchain automático garante versão correta# (Definido em go.mod de cada módulo)
# 3. Desenvolver normalmentecd service1go 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 ./...Migração para Go 1.21+
Seção intitulada “Migração para Go 1.21+”Preparação
Seção intitulada “Preparação”# 1. Atualizar Go para 1.21+# 2. Atualizar go.modgo mod edit -go=1.21
# 3. Adicionar toolchain (opcional mas recomendado)go mod edit -toolchain=go1.21.5
# 4. Tidygo mod tidy
# 5. Testargo build ./...go test ./...Setup do Workspace
Seção intitulada “Setup do Workspace”# Para projetos multi-módulogo work init ./module1 ./module2
# Adicionar ao .gitignoreecho "go.work" >> .gitignoreecho "go.work.sum" >> .gitignoreChecklist de atualização
Seção intitulada “Checklist de atualização”Go 1.18
Seção intitulada “Go 1.18”- Considerar workspace mode para multi-module projects
- Criar
go.worke adicionar ao.gitignore - Documentar workflow de workspace no README
Go 1.19-1.20
Seção intitulada “Go 1.19-1.20”- Conferir a origem dos módulos com
go list -m -json - Usar a flag
-Cem scripts quando necessário - Usar
go work vendorsomente a partir do Go 1.22
Go 1.21
Seção intitulada “Go 1.21”- Adicionar diretiva
toolchainaogo.mod - Configurar
GOTOOLCHAINem CI/CD - Testar download automático de toolchains
- Atualizar documentação de setup
Recursos adicionais
Seção intitulada “Recursos adicionais”- Go 1.18 Release Notes
- Go 1.19 Release Notes
- Go 1.20 Release Notes
- Go 1.21 Release Notes
- Workspace Tutorial
- Toolchain Documentation
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 |