Как в Go управляются зависимости и где физически хранятся сторонние библиотеки (например, драйверы для баз данных)?

Ответ

В современных версиях Go управление зависимостями осуществляется с помощью Go Modules.


  1. Декларация: Зависимости проекта объявляются в файле go.mod, который находится в корне проекта. В файле go.sum хранятся контрольные суммы для проверки целостности модулей.



  2. Хранение: При сборке проекта (go build) или выполнении go mod tidy Go автоматически скачивает необходимые библиотеки. Они хранятся не в папке проекта, а в глобальном кеше модулей, обычно по пути $GOPATH/pkg/mod/.



  3. Vendoring (опционально): Существует также механизм "вендоринга". Если выполнить команду go mod vendor, все зависимости проекта будут скопированы в папку vendor/ в корне проекта. При сборке с флагом -mod=vendor Go будет использовать библиотеки из этой папки, а не из глобального кеша. Это полезно для создания полностью воспроизводимых сборок без необходимости доступа к сети.


Пример подключения драйвера PostgreSQL:

import (
    "database/sql"
    // Пустой импорт (_) используется, чтобы выполнить код инициализации
    // драйвера, который регистрирует себя в пакете database/sql.
    _ "github.com/lib/pq"
)