Добавление внешних зависимостей
go get, управление версиями и кэш модулей
«Добавление внешних зависимостей» — бесплатный урок Go Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Go Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Go Academy содержит 4 уроков всего.
Поиск пакетов
Основной ресурс для поиска пакетов Go — pkg.go.dev. Ищите пакеты, читайте документацию и изучайте примеры использования:
# 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: добавление зависимости
Используйте go get, чтобы добавить зависимость. Команда загружает модуль и обновляет go.mod и 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.4Использование зависимости
После выполнения go get импортируйте пакет и используйте его обычным образом:
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
Предварительно загрузите все зависимости, перечисленные в go.mod, в кэш модулей:
# 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 setupВыбор семантической версии: MVS
Go использует выбор минимальной версии (MVS): всегда выбирается минимальная требуемая версия, удовлетворяющая всем зависимостям. Автоматического перехода на основные версии выше нет:
# 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 — объяснение зависимостей
Узнайте, почему модуль требуется для вашей сборки:
# 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 для воспроизводимых сборок
Включение зависимостей в репозиторий фиксирует их версии и обеспечивает воспроизводимость сборок:
# 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 ...Приватные модули с GONOSUMCHECK и GOPRIVATE
Настройте Go для работы с приватными модулями, размещёнными на внутренних серверах:
# 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
Очистите кэш модулей, чтобы принудительно повторно загрузить все зависимости:
# 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 cleanupПроверка уязвимостей: govulncheck
Официальный сканер уязвимостей Go проверяет зависимости на наличие известных уязвимостей CVE:
# 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.4Быстрая проверка
Какая команда добавляет в модуль зависимость определённой версии?
Итоги: внешние зависимости
Итоги:
go get pkg@versionдобавляет зависимости- Go использует MVS — минимальную версию, удовлетворяющую всем требованиям
go mod tidyудаляет неиспользуемые зависимостиgo mod vendorпредназначена для полностью воспроизводимых сборок без подключения к сети- Используйте
GOPRIVATEдля приватных модулей - Запускайте
govulncheck, чтобы находить уязвимости
Часто задаваемые вопросы
Урок «Добавление внешних зависимостей» бесплатный?
Да — полный текст урока «Добавление внешних зависимостей» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Go Academy, подпишись на CoddyKit PRO. Курс Go Academy содержит 4 уроков всего.
Чему я научусь в уроке «Добавление внешних зависимостей»?
go get, управление версиями и кэш модулей Ты практикуешь Go Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Go Academy?
Предыдущий опыт не требуется. Go Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «Добавление внешних зависимостей»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Go Academy?
Да. Каждый урок Go Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Пакеты: организация кода Go
- Модули Go с go mod
- Добавление внешних зависимостей
- Внутренние пакеты и рабочие пространства