Ícone do site Aprenda Golang

O que é e como usar o Go Modules

Se você já desenvolve em Go, provavelmente já ouviu falar em Go Modules. Introduzido oficialmente no Go 1.11 e aprimorado nas versões subsequentes, os Go Modules mudaram a maneira como gerenciamos dependências e organizamos projetos.

Neste post, vamos explorar o que são Go Modules, porque eles são importantes e como utilizá-los de forma eficiente em seus projetos.

O que são Go Modules?

Go Modules é a maneira oficial de gerenciar dependências em projetos Go. Antes de sua introdução, o Go utilizava o conceito de GOPATH para organizar o código, o que trazia várias limitações, como a necessidade de manter todo o código dentro de uma estrutura específica de diretórios e a dificuldade em gerenciar diferentes versões de bibliotecas.

Com os Go Modules, você pode:

Um módulo em Go é qualquer diretório que contenha um arquivo go.mod. Esse arquivo define o módulo e lista suas dependências.

Como utilizar Go Modules?

Para criar um módulo, você precisa inicializar um arquivo go.mod. Vamos ver como fazer isso na prática com a seguinte sequência de comandos:

mkdir meu-projeto 
cd meu-projeto
go mod init github.com/seuusuario/meu-projeto

Esse comando cria o arquivo go.mod contendo algo como:

module github.com/seuusuario/meu-projeto

go 1.23

A versão do Go que irá aparecer pode variar de computador para computador, já que ele vai adicionar a versão instalada do Go.

Adicionando dependências

Para adicionar uma dependência, basta usar o comando go get:

go get github.com/gin-gonic/gin

Esse comando adiciona a dependência ao seu projeto e atualiza o arquivo go.mod.

O arquivo go.sum será criado para garantir que as dependências sejam exatamente as mesmas em todos os ambientes onde o projeto for compilado. Ele funciona como um lock file, semelhante ao package-lock.json no Node.js.

Atualizando dependências

Você pode atualizar as dependências usando o comando:

go get -u

Esse comando verifica por novas versões das bibliotecas usadas no projeto.

Atualizando go.mod e go.sum

Se uma dependência não for mais necessária, você pode removê-la manualmente do código e executar:

go mod tidy

Esse comando atualiza o go.mod e o go.sum, removendo dependências não utilizadas e adicionando dependências não listadas.

Trabalhando com múltiplos módulos

Em projetos maiores, pode ser necessário dividir o código em múltiplos módulos. Para isso, basta inicializar um novo módulo dentro de um subdiretório:

cd subprojeto
go mod init github.com/seuusuario/meu-projeto/subprojeto

Regras importantes para usar Go Modules

  1. Sempre inicialize o go.mod no diretório raiz do projeto.
  2. Use o comando go mod tidy regularmente para manter suas dependências organizadas.
  3. Evite modificar manualmente o arquivo go.sum.
  4. Utilizando Go Workspaces para projetos locais.

O Go Workspaces é um recurso introduzido no Go 1.18 que facilita o gerenciamento de múltiplos módulos durante o desenvolvimento local, eliminando a necessidade de usar replace no go.mod. Vamos ver como configurar um workspace.

Criando um Go Workspace

Primeiro, crie um arquivo go.work no diretório raiz do seu projeto:

go work init

Depois, adicione os módulos que você deseja incluir no workspace:

go work use ./meu-projeto

Se você estiver desenvolvendo uma biblioteca localmente e quiser incluí-la no workspace:

go work use ../minha-biblioteca

O arquivo go.work resultante será algo assim:

go 1.23

use ./meu-projeto
use ../minha-biblioteca

Com o workspace configurado, o Go utilizará automaticamente a versão local da biblioteca ao invés de baixar a versão publicada no repositório remoto. Isso facilita o desenvolvimento simultâneo de múltiplos módulos.

Publicando seu módulo

Para publicar seu módulo, você precisa versioná-lo usando tags Git:

git tag v1.0.0
git push origin v1.0.0

Agora seu módulo está disponível para ser usado por outros desenvolvedores.

Conclusão

Os Go Modules simplificam o gerenciamento de dependências em projetos Go, tornando a organização e manutenção de projetos mais fáceis e eficientes. Se você ainda não está usando Go Modules, é hora de adotar essa prática em seus projetos.

Gostou do conteúdo?

  • Inscreva-se na nossa newsletter para receber mais dicas práticas sobre Go, Kubernetes e desenvolvimento de software diretamente no seu e-mail!
  • 🚀 Torne-se um assinante pago do blog e tenha acesso a conteúdos exclusivos, como tutoriais avançados, estudos de caso e muito mais!

Faça parte da comunidade!

Receba os melhores conteúdos sobre Go, Kubernetes, arquitetura de software, Cloud e esteja sempre atualizado com as tendências e práticas do mercado.

Livros Recomendados

Abaixo listei alguns dos melhores livros que já li sobre GO.

Sair da versão mobile