Adicionando dependências externas
go get, versionamento e cache de módulos
Adicionando dependências externas é uma aula grátis de Go Academy no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Go Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Go Academy inclui 4 aulas no total.
Encontrando pacotes
O principal recurso para encontrar pacotes Go é o pkg.go.dev. Pesquise pacotes, leia a documentação e veja exemplos de uso:
# Search and explore at https://pkg.go.dev
# Popular packages:
# github.com/gin-gonic/gin — HTTP framework
# github.com/stretchr/testify — test assertions
# golang.org/x/sync — extended sync primitives
# github.com/spf13/cobra — CLI framework
# github.com/jackc/pgx/v5 — PostgreSQL drivergo get: adicionando uma dependência
Utilize go get para adicionar uma dependência. Ele baixa o módulo e atualiza go.mod e go.sum:
# Add latest version
go get github.com/stretchr/testify
# Add specific version
go get github.com/stretchr/testify@v1.8.4
# Add a pre-release version
go get github.com/foo/bar@main
# go get updates go.mod:
# require github.com/stretchr/testify v1.8.4Utilizando a dependência
Depois de executar go get, importe e utilize o pacote normalmente:
package main
import (
"fmt"
"github.com/stretchr/testify/assert"
"testing"
)
func TestAdd(t *testing.T) {
assert.Equal(t, 4, 2+2, "math should work")
fmt.Println("assertion done")
_ = assert.New // suppress unused import
}go mod download
Baixe previamente todas as dependências listadas em go.mod para o cache de módulos:
# Download all deps from go.mod
go mod download
# Download specific module
go mod download github.com/gin-gonic/gin@v1.9.1
# Useful for:
# - Docker layer caching (copy go.mod/go.sum first, then download)
# - Pre-warming CI cache
# - Offline development setupSeleção de versões semânticas: MVS
Go utiliza a Seleção da Versão Mínima (MVS): ele sempre escolhe a versão mínima exigida que satisfaz todas as dependências. Não há atualizações principais automáticas:
# If A requires gin v1.9.0
# and B requires gin v1.9.1
# MVS selects v1.9.1 (minimum that satisfies both)
# To upgrade ALL dependencies to latest minor/patch:
go get -u ./...
# To upgrade specific package:
go get -u github.com/gin-gonic/gingo mod why — explicando dependências
Descubra por que um módulo é necessário na sua compilação:
# Why is encoding/json needed?
go mod why encoding/json
# Why is golang.org/x/net needed?
go mod why golang.org/x/net
# Output shows the import chain:
# github.com/myapp
# github.com/gin-gonic/gin
# golang.org/x/netgo mod vendor para compilações reproduzíveis
O uso de fornecedores fixa todas as dependências no seu repositório para obter compilações reproduzíveis:
# Vendor all deps
go mod vendor
# Build only from vendor (no network)
go build -mod=vendor ./...
# Dockerfile pattern:
# COPY go.mod go.sum ./
# RUN go mod download
# COPY . .
# RUN go build ...Módulos privados com GONOSUMCHECK e GOPRIVATE
Configure o Go para módulos privados hospedados em servidores internos:
# Tell Go not to use proxy/sumdb for private modules
export GOPRIVATE=github.com/mycompany/*
export GONOSUMCHECK=github.com/mycompany/*
# Or in go env:
go env -w GOPRIVATE=github.com/mycompany/*
# For enterprise Go proxy:
export GOPROXY=https://proxy.mycompany.com,directgo clean -modcache
Limpe o cache de módulos para forçar o novo download de todas as dependências:
# Clear entire module cache
go clean -modcache
# Clear cache for specific version
go clean -modcache github.com/gin-gonic/gin@v1.9.1
# Useful when:
# - Cache is corrupted
# - Testing with a fresh environment
# - Disk space cleanupVerificando vulnerabilidades: govulncheck
O verificador oficial de vulnerabilidades do Go verifica se suas dependências apresentam CVEs conhecidas:
# Install govulncheck
go install golang.org/x/vuln/cmd/govulncheck@latest
# Scan your module
govulncheck ./...
# Output example:
# Vulnerability #1: GO-2023-1234
# github.com/foo/bar v1.2.3
# Fixed in: v1.2.4
# Suggestion: go get github.com/foo/bar@v1.2.4Verificação rápida
Qual comando adiciona uma versão específica de uma dependência ao seu módulo?
Recapitulação: dependências externas
Resumo:
go get pkg@versionadiciona dependências- Go utiliza MVS — a versão mínima que satisfaz todos os requisitos
go mod tidylimpa as dependências não utilizadasgo mod vendoré usado para compilações offline totalmente reproduzíveis- Utilize
GOPRIVATEpara módulos privados - Execute
govulncheckpara encontrar vulnerabilidades
Perguntas Frequentes
A aula “Adicionando dependências externas” é grátis?
Sim — o texto completo de “Adicionando dependências externas” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Go Academy, atualize para CoddyKit PRO. O curso de Go Academy inclui 4 aulas no total.
O que vou aprender em “Adicionando dependências externas”?
go get, versionamento e cache de módulos Você pratica Go Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Go Academy?
Nenhuma experiência prévia é necessária. Go Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.
Quanto tempo leva a aula “Adicionando dependências externas”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Go Academy?
Sim. Cada aula de Go Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Pacotes: organizando código Go
- Módulos Go com go mod
- Adicionando dependências externas
- Pacotes internos e workspaces