Ответ
go.mod
— это манифест-файл, который является центральным элементом системы управления зависимостями в Go (Go Modules). Он появился в Go 1.11 и заменил старую систему на основе GOPATH
.
Ключевые задачи go.mod
:
Определение модуля: Директива
module
в начале файла объявляет путь модуля, который служит уникальным идентификатором и префиксом для всех пакетов внутри него. Например:module github.com/my-user/my-project
.Управление зависимостями: Директива
require
перечисляет все прямые зависимости проекта с указанием их минимальных версий. Go использует семантическое версионирование (SemVer).Указание версии Go: Директива
go
указывает минимальную версию языка Go, необходимую для компиляции модуля. Например:go 1.21
.Обеспечение воспроизводимых сборок (Reproducible Builds):
go.mod
работает в паре с файломgo.sum
.go.mod
фиксирует минимальные версии прямых зависимостей.go.sum
содержит криптографические хэши всех зависимостей (прямых и косвенных) для проверки их целостности. Это гарантирует, что при каждой сборке используются абсолютно те же самые версии пакетов, что и у других разработчиков, и защищает от подмены кода.
Пример файла go.mod
:
// Путь модуля, используемый для импорта
module example.com/myapp
// Минимальная требуемая версия Go
go 1.21
// Список прямых зависимостей и их версий
require (
github.com/gorilla/mux v1.8.0
golang.org/x/sync v0.3.0
)
// Список косвенных зависимостей (добавляется автоматически)
indirect (
// ... здесь могут быть зависимости, которые нужны вашим зависимостям
)
Другие важные директивы:
replace
: Позволяет заменить зависимость на другую версию или на локальный путь. Очень полезно для отладки или при использовании форка библиотеки.replace example.com/some/lib => ../local/fork/lib
exclude
: Запрещает использование определенной версии зависимости.
Файлы go.mod
и go.sum
управляются автоматически командами go get
, go mod tidy
и другими.