Ответ
Директория vendor
в Go — это механизм для изоляции зависимостей проекта. Она содержит точные копии всех сторонних библиотек, от которых зависит проект. Когда эта директория присутствует, компилятор Go по умолчанию использует пакеты из неё, а не из глобального кэша модулей.
Это обеспечивает воспроизводимость сборок, так как проект становится полностью самодостаточным и не зависит от доступности внешних репозиториев или изменений в них.
Как это работает:
- Вы управляете зависимостями в файле
go.mod
. - Выполняете команду
go mod vendor
. - Go создаёт директорию
vendor
и копирует в неё исходный код всех зависимостей изgo.mod
.
Пример структуры проекта:
myproject/
├── go.mod
├── go.sum
├── main.go
└── vendor/ <-- Создается командой `go mod vendor`
├── github.com/
├── golang.org/
└── ...
Основные команды:
go mod vendor
— создаёт или обновляет директориюvendor
.go build -mod=vendor
— принудительно использует зависимости изvendor
(начиная с Go 1.14, этот флаг часто не требуется, если директорияvendor
существует).
Преимущества:
- Изоляция и воспроизводимость: Сборка не зависит от внешних факторов и всегда будет использовать одни и те же версии кода.
- Работа в оффлайн-режиме: Проект можно собрать без доступа к интернету.
- Контроль: Полный контроль над кодом зависимостей, который можно даже аудировать или модифицировать при необходимости.
Недостатки:
- Размер репозитория: Директория
vendor
может значительно увеличивать размер репозитория. - Ручное обновление: Требуется не забывать выполнять
go mod vendor
после каждого изменения вgo.mod
.