Поиск…


замечания

Vendoring - это метод обеспечения того, чтобы все ваши сторонние пакеты, которые вы используете в проекте Go, были согласованы для всех, кто разрабатывает для вашего приложения.

Когда ваш пакет Go импортирует другой пакет, компилятор обычно проверяет $GOPATH/src/ путь к импортированному проекту. Однако, если ваш пакет содержит папку с именем vendor , компилятор сначала проверит эту папку. Это означает, что вы можете импортировать пакеты сторонних сторон в свой собственный репозиторий кода, не изменяя их код.

Vendoring - стандартная функция в Go 1.6 и выше. В Go 1.5 вам нужно установить переменную окружения GO15VENDOREXPERIMENT=1 чтобы включить распространение.

Использовать govendor для добавления внешних пакетов

Govendor - это инструмент, который используется для импорта сторонних пакетов в ваш репозиторий кода таким образом, который совместим с поставщиком golang.

Скажем, например, что вы используете сторонний пакет bosun.org/slog :

package main

import "bosun.org/slog"

func main() {
    slog.Infof("Hello World")
}

Структура вашего каталога может выглядеть так:

$GOPATH/src/
├── github.com/me/helloworld/
|   ├── hello.go 
├── bosun.org/slog/
|   ├── ... (slog files)

Однако у кого-то, кто клонирует github.com/me/helloworld может не быть $GOPATH/src/bosun.org/slog/ , что приведет к сбою их сборки из-за отсутствия пакетов.

Выполнение следующей команды в командной строке будет захватывать все внешние пакеты из вашего пакета Go и упаковывать необходимые биты в папку поставщика:

govendor add +e

Это дает команду govendor добавить все внешние пакеты в ваш текущий репозиторий.

Структура каталогов вашего приложения теперь будет выглядеть так:

$GOPATH/src/
├── github.com/me/helloworld/
|   ├── vendor/
|   |   ├── bosun.org/slog/
|   |   |   ├── ... (slog files)
|   ├── hello.go 

и те, кто клонирует ваш репозиторий, также захватят требуемые сторонние пакеты.

Использование корзины для управления ./vendor

trash - это минималистический инструмент для вендоров, который вы настраиваете с vendor.conf файла vendor.conf . Этот пример предназначен для trash :

# package
github.com/rancher/trash

github.com/Sirupsen/logrus                      v0.10.0
github.com/urfave/cli                           v1.18.0
github.com/cloudfoundry-incubator/candiedyaml   99c3df8  https://github.com/imikushin/candiedyaml.git
github.com/stretchr/testify                     v1.1.3
github.com/davecgh/go-spew                      5215b55
github.com/pmezard/go-difflib                   792786c
golang.org/x/sys                                a408501

Первая строка без комментариев - это пакет, в котором мы управляем ./vendor (примечание: это может быть буквально любой пакет в вашем проекте, а не только корневой).

Прокомментированные строки начинаются с # .

В каждой непустой строке и без комментария отображается одна зависимость. Необходимо указать только «корневой» пакет зависимости.

После имени пакета идет версия (фиксация, тег или ветка) и, возможно, URL-адрес репозитория пакета (по умолчанию он выводится из имени пакета).

Чтобы заполнить ваш каталог ./vendor, вам необходимо иметь файл vendor.conf в текущем vendor.conf и просто запустить:

$ trash

Trash будет клонировать имеющиеся библиотеки в ~/.trash-cache (по умолчанию), проверять запрошенные версии, копировать файлы в ./vendor и обрезать не импортированные пакеты и тестовые файлы . Этот последний шаг позволяет вашему ./vendor быть скудным и средним и помогает экономить место в репозитории проекта.

Примечание: с v0.2.5 мусор доступен для Linux и macOS и поддерживает только git для извлечения пакетов, поскольку git является самым популярным, но мы работаем над добавлением всех остальных, которые go get поддержку.

Использовать golang / dep

golang / dep - это инструмент для управления зависимостями прототипа. Скоро станет официальным инструментом управления версиями. Текущее состояние Alpha .

использование

Получить инструмент через

$ go get -u github.com/golang/dep/...

Типичное использование нового репо может быть

$ dep init
$ dep ensure -update

Чтобы обновить зависимость от новой версии, вы можете запустить

$ dep ensure github.com/pkg/errors@^0.8.0

Обратите внимание, что форматы файлов манифеста и блокировки теперь завершены . Они будут совместимы даже с изменением инструмента.

vendor.json с помощью инструмента Govendor

# It creates vendor folder and vendor.json inside it
govendor init

# Add dependencies in vendor.json
govendor fetch <dependency>

# Usage on new repository
# fetch depenencies in vendor.json
govendor sync

Пример vendor.json

{

"comment": "",
"ignore": "test",
"package": [
    {
        "checksumSHA1": "kBeNcaKk56FguvPSUCEaH6AxpRc=",
        "path": "github.com/golang/protobuf/proto",
        "revision": "2bba0603135d7d7f5cb73b2125beeda19c09f4ef",
        "revisionTime": "2017-03-31T03:19:02Z"
    },
    {
        "checksumSHA1": "1DRAxdlWzS4U0xKN/yQ/fdNN7f0=",
        "path": "github.com/syndtr/goleveldb/leveldb/errors",
        "revision": "8c81ea47d4c41a385645e133e15510fc6a2a74b4",
        "revisionTime": "2017-04-09T01:48:31Z"
    }
],
"rootPath": "github.com/sample"

}


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow