Workspace Mode
Workspace Mode para desenvolvimento com múltiplos módulos simultaneamente
O que é Workspace Mode?
Workspace Mode (Modo Workspace) foi introduzido no Go 1.18 (março de 2022) e permite que você trabalhe com múltiplos módulos simultaneamente em um ambiente de desenvolvimento compartilhado.
Antes do Workspace Mode, desenvolver em múltiplos módulos localmente exigia editar manualmente diretivas replace no go.mod, o que era trabalhoso e propenso a erros. Agora, você pode trabalhar em vários módulos sem modificar seus arquivos go.mod.
Problema que resolve
Antes do Workspace Mode (Go ≤ 1.17)
Imagine que você está desenvolvendo dois módulos: app e library. O app depende de library:
# Para testar mudanças locais em library, você precisava:
# 1. Editar app/go.mod adicionando:
replace github.com/user/library => ../library
# 2. Desenvolver e testar
# 3. LEMBRAR de remover a diretiva replace antes de fazer commit
# 4. Publicar library
# 5. Atualizar app para usar a versão publicadaIsso era trabalhoso, especialmente com muitos módulos!
Com Workspace Mode (Go ≥ 1.18)
Estrutura do arquivo go.work
O arquivo go.work tem sintaxe similar ao go.mod:
Diretivas do go.work
go
Versão do Go para interpretar o arquivo
go 1.25
use
Módulos ativos no workspace
use ./module-path
replace
Sobrescreve módulos (opcional)
replace foo => bar v1.0.0
toolchain
Especifica toolchain do Go (Go 1.21+)
toolchain go1.25.0
Como funciona?
Quando um arquivo go.work existe, o comando go:
Trata todos os módulos listados em
usecomo módulos principaisResolve importações preferindo os módulos do workspace
Permite executar comandos em qualquer módulo a partir da raiz do workspace
Sincroniza dependências entre os módulos quando solicitado
Criando um Workspace
Método 1: Inicialização com módulos
Método 2: Adicionar módulos recursivamente
Exemplo Prático Completo
Cenário: Desenvolvendo uma aplicação e uma biblioteca juntas
Modificando a biblioteca
Comandos de Workspace
go work init
Cria um novo arquivo go.work:
go work use
Adiciona ou remove módulos do workspace:
go work sync
Sincroniza dependências do workspace para os módulos:
go work edit
Edita o arquivo go.work:
go work vendor (Go 1.22+)
Cria um diretório vendor para o workspace inteiro:
Variáveis de Ambiente
GOWORK
Controla qual arquivo workspace usar:
Casos de Uso
1. Desenvolvimento Local de Dependências
Trabalhar em uma aplicação e suas bibliotecas simultaneamente:
2. Monorepos
Gerenciar múltiplos serviços em um único repositório:
3. Contribuindo para Projetos Open Source
Testar mudanças em um projeto que você está contribuindo:
Workflow de Release
Quando estiver pronto para publicar:
1. Publicar a biblioteca
2. Atualizar a aplicação
3. O workspace continua funcionando
Mesmo após publicar, o workspace continua usando a versão local para desenvolvimento contínuo.
Melhores Práticas
✅ Faça
Adicione
go.workego.work.sumao.gitignoreUse workspace para desenvolvimento local
Documente no README como configurar o workspace para novos desenvolvedores
Use
go work syncperiodicamente para manter dependências sincronizadas
❌ Não faça
Nunca comite
go.workno repositório (é pessoal)Não confie em workspace para builds de produção
Não use replace no
go.workse puder evitar (prefira nogo.modse necessário)Não esqueça de testar sem o workspace antes de release
Troubleshooting
Problema: "package X is not in GOROOT or in any module"
Problema: Versões de dependências conflitantes
Problema: Build funciona localmente mas falha no CI/CD
go.work.sum
Similar ao go.sum, o arquivo go.work.sum contém checksums das dependências usadas no workspace.
Comparação: replace vs workspace
Onde
Dentro do módulo
Fora dos módulos
Escopo
Um módulo
Múltiplos módulos
Commit
Sim (com cuidado)
Não (sempre local)
Uso
Override permanente
Desenvolvimento local
Afeta CI
Sim
Não
Recursos Adicionais
Conclusão
Workspace Mode é uma ferramenta poderosa para desenvolvimento local com múltiplos módulos. Ele simplifica o workflow, elimina a necessidade de diretivas replace temporárias, e torna o desenvolvimento em monorepos muito mais agradável.
Dica: Se você trabalha regularmente com múltiplos módulos relacionados, workspace mode vai economizar muito tempo e frustração!
Last updated