Importação de pacotes locais em Go: guia passo a passo com código

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Por que a importação de pacotes locais em Go gera tantas dúvidas?

\n\n

Se você já tentou organizar código Go em arquivos e pastas separados, certamente já se deparou com um erro como could not import "myproject/utils". Este é um dos problemas mais comuns entre desenvolvedores Go iniciantes. No Stack Overflow, a pergunta "How to import local packages in go?" acumulou milhares de visualizações — e não é à toa.

\n\n

Diferente do Python, onde basta colocar o arquivo ao lado e escrever import mymodule, o Go exige uma estrutura clara e a configuração correta de módulos. Mas, uma vez dominado esse mecanismo, você perceberá o quão elegante ele é. Vamos entender de uma vez por todas.

\n\n

Breve teoria: como o Go entende pacotes

\n\n

Antes de escrever código, lembre-se de três princípios-chave:

\n\n
    \n
  • Go é uma linguagem com estrutura modular rígida. Cada diretório é um pacote (package).
  • \n
  • O nome do pacote não precisa coincidir com o nome da pasta, mas é altamente recomendado fazê-lo para legibilidade.
  • \n
  • A importação de pacotes locais desde 2019 é feita através de módulos (Go modules). Esqueça o GOPATH — use go mod.
  • \n
\n\n

Agora vamos à prática.

\n\n

Passo 1: Criando um projeto com módulo

\n\n

Abra o terminal e crie uma nova pasta para o seu projeto:

\n\n
mkdir go-local-imports\ncd go-local-imports\n
\n\n

Agora inicialize o módulo. O nome do módulo pode ser qualquer um, mas é lógico usar um caminho que seja único (por exemplo, um link para o repositório):

\n\n
go mod init github.com/seu-usuario/go-local-imports\n
\n\n

Após este comando, o arquivo go.mod aparecerá na pasta. Será ele quem gerenciará as dependências — tanto locais quanto externas.

\n\n

Passo 2: Criando um pacote local

\n\n

Vamos criar a pasta utils dentro do projeto. Dentro dela, o arquivo math.go:

\n\n
mkdir utils\ncd utils\ntouch math.go\n
\n\n

Abra utils/math.go e escreva:

\n\n
package utils\n\n// Add retorna a soma de dois números inteiros\nfunc Add(a, b int) int {\n    return a + b\n}\n
\n\n

Observe: a função Add foi escrita com letra maiúscula. Em Go, isso significa que ela é exportada (pública). Se escrever add — ela será privada e inacessível de outros pacotes.

\n\n

Passo 3: Importando e usando o pacote local

\n\n

Volte para a pasta raiz do projeto e crie main.go:

\n\n
cd ..\ntouch main.go\n
\n\n

Conteúdo de main.go:

\n\n
package main\n\nimport (\n    "fmt"\n    "github.com/seu-usuario/go-local-imports/utils"\n)\n\nfunc main() {\n    result := utils.Add(3, 5)\n    fmt.Println("Soma:", result)\n}\n
\n\n

Agora execute o programa:

\n\n
go run main.go\n
\n\n

Você deve ver:

\n\n
Soma: 8\n
\n\n

Tudo funcionando! Mas se você recebeu um erro — leia a próxima seção.

\n\n

Erros típicos e suas soluções

\n\n

Erro 1: "package is not in GOROOT"

\n\n

Você vê algo como:

\n
package myproject/utils is not in GOROOT (/usr/local/go/src/myproject/utils)
\n\n

Causa: Você está tentando importar um pacote sem módulo. O Go o procura na biblioteca padrão, e não no seu projeto.

\n

Solução: Certifique-se de que existe um go.mod na raiz do projeto. Se não houver, execute go mod init nome-do-modulo.

\n\n

Erro 2: "undefined: utils.Add"

\n\n

Causa: A função foi escrita com letra minúscula (privada), ou você importou o pacote mas não está usando o nome dele.

\n

Solução: Verifique se todas as funções necessárias estão exportadas (com letra maiúscula), e se você está se referindo a elas

Blogs

Book Recommendations