Szukaj…


Uwagi

Vendoring to metoda zapewniająca spójność wszystkich pakietów innych firm używanych w projekcie Go dla wszystkich, którzy opracowują aplikacje.

Gdy pakiet Go importuje inny pakiet, kompilator zwykle sprawdza $GOPATH/src/ poszukiwaniu ścieżki importowanego projektu. Jednakże, jeśli opakowanie zawiera folder o nazwie vendor , kompilator sprawdzi w tym folderze pierwszy. Oznacza to, że możesz importować pakiety innych podmiotów wewnątrz własnego repozytorium kodów, bez konieczności modyfikowania ich kodu.

Dostarczanie jest standardową funkcją w wersji Go 1.6 i nowszych. W wersji Go 1.5 musisz ustawić zmienną środowiskową GO15VENDOREXPERIMENT=1 aby umożliwić sprzedawanie.

Użyj govendor, aby dodać pakiety zewnętrzne

Govendor to narzędzie, które służy do importowania pakietów stron trzecich do repozytorium kodu w sposób kompatybilny z dostawcami golang.

Powiedz na przykład, że używasz pakietu innej firmy bosun.org/slog :

package main

import "bosun.org/slog"

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

Struktura katalogu może wyglądać następująco:

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

Jednak ktoś, kto klonuje github.com/me/helloworld nie może mieć $GOPATH/src/bosun.org/slog/ folderu, powodując ich gromadzeniu się niepowodzeniem z powodu brakujących pakietów.

Uruchomienie następującego polecenia w wierszu polecenia spowoduje pobranie wszystkich zewnętrznych pakietów z pakietu Go i spakowanie wymaganych bitów do folderu dostawcy:

govendor add +e

To instruuje govendor, aby dodał wszystkie zewnętrzne pakiety do twojego bieżącego repozytorium.

Struktura katalogów aplikacji wyglądałaby teraz następująco:

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

a ci, którzy sklonują twoje repozytorium, również zdobędą wymagane pakiety stron trzecich.

Używanie kosza do zarządzania ./vendor

trash to minimalistyczne narzędzie do sprzedaży, które konfigurujesz za vendor.conf pliku vendor.conf . Ten przykład dotyczy samego 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

Pierwszy wiersz bez komentarza to pakiet, którym zarządzamy ./vendor (uwaga: może to być dosłownie każdy pakiet w twoim projekcie, nie tylko ten główny).

Komentowane linie zaczynają się od # .

Każda niepusta linia bez komentarza zawiera jedną zależność. Należy wymienić tylko pakiet „root” zależności.

Po nazwie pakietu następuje wersja (zatwierdzenie, znacznik lub gałąź) i opcjonalnie adres URL repozytorium pakietów (domyślnie jest to wywnioskowane z nazwy pakietu).

Aby wypełnić katalog ./vendor, musisz mieć plik vendor.conf w bieżącym katalogu i po prostu uruchomić:

$ trash

Kosz sklonuje sprzedawane biblioteki do ~/.trash-cache (domyślnie), ./vendor żądane wersje, kopiuje pliki do katalogu ./vendor i przycina ./vendor pakiety i pliki testowe . Ten ostatni krok sprawia, że Twój ./vendor jest szczupły i wredny i pomaga zaoszczędzić miejsce w repozytorium projektu.

Uwaga: od wersji 0.2.5 kosz jest dostępny dla Linuksa i macOS i obsługuje tylko git do pobierania pakietów, jako najpopularniejszy z git, ale pracujemy nad dodaniem wszystkich innych, które go get obsługiwane.

Użyj golang / dep

golang / dep to prototypowe narzędzie do zarządzania zależnościami. Wkrótce stanie się oficjalnym narzędziem do wersjonowania. Obecny status Alpha .

Stosowanie

Pobierz narzędzie przez

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

Typowe użycie w nowym repozytorium może być

$ dep init
$ dep ensure -update

Aby zaktualizować zależność do nowej wersji, możesz uruchomić

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

Zauważ, że formaty plików manifestu i blokady zostały już sfinalizowane . Pozostaną one kompatybilne nawet podczas zmiany narzędzia.

vendor.json za pomocą narzędzia 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

Przykład 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
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow