Go
Sprzedawanie
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"
}