0Pricing
Go Academy · Урок

Добавление внешних зависимостей

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 driver

go 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/gin

go 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/net

go 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,direct

go 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 — локальная установка не требуется.

Все уроки этого курса

  1. Пакеты: организация кода Go
  2. Модули Go с go mod
  3. Добавление внешних зависимостей
  4. Внутренние пакеты и рабочие пространства
← Назад к Go Academy