Noções Básicas de Pacotes e Módulos
10 exemplos para você começar com Pacotes e Módulos - 7 básicos e 3 intermediários.
Busque em todas as páginas da documentação
10 exemplos para você começar com Pacotes e Módulos - 7 básicos e 3 intermediários.
mkdir moddemo && cd moddemo.go mod init example.com/moddemo.go run . após salvá-los como main.go (ou o caminho mostrado).go mod init grava o go.mod com o caminho do seu módulo.
// Execute primeiro no shell:
// go mod init example.com/moddemoexample.com/... para aprendizado).go.mod é a raiz versionada para cada pacote sob esta árvore de diretórios.go.mod, a menos que você divida módulos.Relacionado: Pacotes e Módulos: A Unidade de Distribuição do Go - modelo mental de pacotes vs. módulos
Divida o código entre pacotes dentro do mesmo módulo.
// greet/greet.go
package greet
import "fmt"
func Hello(name string) string {
return fmt.Sprintf("hello, %s", name)
}// main.go
package main
import (
"fmt"
"example.com/moddemo/greet"
)
func main() {
fmt.Println(greet.Hello("Go"))
}caminho do módulo + /diretório.go run .Relacionado: Nomenclatura de Pacotes e Diretórios internal/ - regras de nomenclatura e visibilidade
go get registra um requisito semver em go.mod.
go get github.com/google/uuid@latestpackage main
import (
"fmt"
"github.com/google/uuid"
)
func main() {
fmt.Println(uuid.NewString())
}go get atualiza go.mod e go.sum.@v1.6.0 em vez de @latest.Relacionado: go.mod, go.sum e Seleção Mínima de Versão - como as versões são resolvidas
Remova requisitos não utilizados e adicione os ausentes.
go mod tidygo mod tidy alterar arquivos - use go mod tidy -diff ou ganchos de commit.go.sum alinhado com as importações reais.Relacionado: Melhores Práticas de Pacotes, Módulos e Layout de Projeto - hábitos de higiene
Inspecione o que a toolchain selecionou.
go list -m all
go list -m -versions github.com/google/uuidall imprime a lista de compilação para o módulo atual.-versions consulta as tags disponíveis da origem (requer rede).Relacionado: Diretivas Pseudo-Versões, replace e retract - substituições e lançamentos ruins
internal/ bloqueia importações de fora da árvore pai.
moddemo/
go.mod
cmd/app/main.go
internal/config/config.go
// internal/config/config.go
package config
const Port = 8080// cmd/app/main.go
package main
import (
"fmt"
"example.com/moddemo/internal/config"
)
func main() {
fmt.Println(config.Port)
}example.com/moddemo não pode importar internal/config.internal/ em vez de comentários para APIs "não usar".Relacionado: Layout Padrão de Projeto para Serviços e Bibliotecas - layout cmd e internal
Importe apenas para init, não para uso direto de símbolos.
package main
import (
"fmt"
_ "example.com/moddemo/register" // aciona init no pacote register
)
func main() {
fmt.Println("drivers registered")
}// register/register.go
package register
func init() {
// registra plugin, driver ou manipulador http
}init na ordem de dependência._ "github.com/lib/pq") e formatos de imagem.Relacionado: Ciclos de Importação, Importações em Branco e Importações Dot - quando as importações de efeitos colaterais se encaixam
Aponte um requisito para um caminho local durante o desenvolvimento.
// trecho de go.mod
module example.com/moddemo
go 1.26
require example.com/lib v0.0.0
replace example.com/lib => ../libreplace é para desenvolvimento; evite confirmar caminhos específicos da máquina em branches principais compartilhadas sem documentação.replace não publicados no seu laptop, a menos que você os confirme.go.work para repositórios multi-módulo quando vários módulos se editam diariamente.Relacionado: go work: Modo Workspace para Repositórios Multi-Módulo - workspace sem hacks de replace
Desenvolva múltiplos módulos juntos sem editar o go.mod de cada um.
# Do diretório raiz do repositório com módulos irmãos app/ e lib/
go work init ./app ./lib
go work use ./app ./lib// app/go.mod
module example.com/app
go 1.26
require example.com/lib v0.0.0go.work se aplica apenas na sua máquina; não o publique como o contrato da biblioteca.GOWORK=off força o modo apenas de módulo para comparações de CI reproduzíveis.use à medida que novos módulos entram no monorepo.Relacionado: go work: Modo Workspace para Repositórios Multi-Módulo - fluxo de trabalho completo do workspace
main fina, lógica em pacotes, código privado em internal/.
myapp/
go.mod
cmd/myapp/main.go
internal/server/server.go
pkg/client/client.go // opcional: API pública estável para outros repositórios
// cmd/myapp/main.go
package main
import "example.com/myapp/internal/server"
func main() {
server.Run()
}cmd/ contém um diretório por binário; cada um é package main.internal/ é estritamente privado; pkg/ é uma API pública convencional (ainda é sua escolha suportar).cmd/.Relacionado: Layout Padrão de Projeto para Serviços e Bibliotecas - orientação completa de layout
Versões da Pilha: Esta página foi escrita para Go 1.26.x (GC padrão Green Tea, modernizadores go fix - verifique o patch na compilação), chi (última versão - verifique na compilação), gin (última versão - verifique na compilação), echo (última versão - verifique na compilação), google.golang.org/grpc (última versão - verifique na compilação), sigs.k8s.io/controller-runtime (última versão - verifique na compilação), kubebuilder (última versão - verifique na compilação), tinygo (última versão - verifique os alvos de placa na compilação), wazero (última versão - verifique na compilação) e golangci-lint (última versão - verifique o conjunto de linters na compilação).
Revisado por Chris St. John·Última atualização: 19 de jul. de 2026