четверг, 4 июля 2019 г.

Каталоги поставщиков (Vendor Directories) в Golang

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

Код под каталогом с именем vendor импортируется только кодом в дереве каталогов, корнем которого является родительский элемент vendor, и только с использованием пути импорта, в котором префикс не указан, вплоть до элемента vendor.

Вот пример из предыдущего поста, но с "internal" каталогом, переименованным в "vendor" и добавленным новым каталогом foo/vendor/crash/bang:

/home/user/go/
    src/
        crash/
            bang/              (go код в пакете bang)
                b.go
        foo/                   (go код в пакете foo)
            f.go
            bar/               (go код в пакете bar)
                x.go
            vendor/
                crash/
                    bang/      (go код в пакете bang)
                        b.go
                baz/           (go код в пакете baz)
                    z.go
            quux/              (go код в пакете main)
                y.go

Применяются те же правила видимости, что и для internal, но код в z.go импортируется как "baz", а не как "foo/vendor/baz".

Код в vendor каталогах, находящихся глубже в дереве исходного кода затеняет код в вышестоящих каталогах. В поддереве с корнем в foo импорт "crash/bang" разрешается в "foo/vendor/crash/bang", а не в "crash/bang" верхнего уровня.

Код в каталогах поставщиков не подлежит проверке пути импорта (см. go help importpath).

Когда 'go get' проверяет или обновляет git-репозиторий, теперь он также обновляет подмодули.

Каталоги поставщиков не влияют на размещение новых репозиториев, впервые проверяемых с помощью функции 'go get': они всегда помещаются в основной GOPATH, а не в поддерево поставщиков.


Читайте также:


Комментариев нет:

Отправить комментарий