Heim >häufiges Problem >Eine kurze Diskussion über govendor, das Go-Tool zur Paketabhängigkeitsverwaltung
govendor ist ein Befehlszeilentool zur Verwaltung von Go-Paketabhängigkeiten, das auf dem vendor
-Mechanismus basiert. Nicht-intrusive Integration mit nativen Anbietern und Unterstützung der Migration von anderen Abhängigkeitsmanagement-Tools. Es kann problemlos die Entwicklung und Verwaltung verschiedener Versionen desselben Pakets in verschiedenen Projekten ohne gegenseitiges Eindringen realisieren.
Zu Beginn stellte Go kein geeignetes Paketverwaltungstool zur Verfügung. Die Herstellerfunktion ist ab Version 1.5 verfügbar, erfordert jedoch die manuelle Einstellung von Umgebungsvariablen GO15VENDOREXPERIMENT=1
.
Beim Ausführen des Befehls go build
oder go run
wird das Paket in der folgenden Reihenfolge durchsucht:
Wenn Version 1.6 veröffentlicht wird, ist dies der Fall Umgebungsvariable Der Wert von wurde standardmäßig auf 1 gesetzt und der Wert kann mit dem Befehl go env
angezeigt werden.
Bei der Veröffentlichung von Version 1.7 wurde diese Umgebungsvariable entfernt und die Funktion vendor
standardmäßig aktiviert.
main
, das nicht package
enthält) sollte keine externen Pakete im Verzeichnis vendor
in seiner eigenen Versionskontrolle speichern. es sei denn, es gibt einen besonderen Grund und Sie wissen, warum Sie es tun möchten. In einer Anwendung (einschließlich main
und package
) wird empfohlen, dass es nur ein vendor
-Verzeichnis gibt, und zwar im Verzeichnis auf Codebasisebene.
Verwandte Tutorials: Go-Video-Tutorial
Govendor ist eine Paketverwaltung, die auf dem vendor
-Verzeichnis basiert Mechanismuswerkzeug.
$GOPATH
in das Verzeichnis vendor
des Projekts. vendor/vendor.json
Führen Sie eine Paket- und Versionsverwaltung durch, die PHPs Composer
govendor add/update
$GOPATH
unterstützt ignoriert wird, kann es verwendet werden vendor/*/
kann direkt verwendet werden govendor sync
Abhängigkeitspakete hinzufügen oder aktualisieren govendor fetch
Ein-Klick-Migration von anderen govendor migrate
vendor
Unterstützt Linux, macOS, Windows und sogar alle vorhandenen Betriebssystemegovendor
Das Projekt muss sich im
-Verzeichnis befinden$GOPATH/src
set GO15VENDOREXPERIMENT=1
Installierengo get -u github.com/kardianos/govendorUm
export PATH="$GOPATH/bin:$PATH"
govendor
Initialisierung$GOPATH/bin
Führen Sie den folgenden Befehl im Projektstammverzeichnis aus, um govendor init
Es wird automatisch generiert in das Projektstammverzeichnisvendor
Verzeichnisse und
: vendor
{ "comment": "", "ignore": "test", "package": [], "rootPath": "govendor-example" }
vendor.json
Allgemeine Befehlevendor.json
$GOPATH
govendor add +external
vendor
govendor add gopkg.in/yaml.v2
$GOPATH
govendor list
e github.com/gin-contrib/sse e github.com/gin-gonic/gin e github.com/gin-gonic/gin/binding e github.com/gin-gonic/gin/internal/json e github.com/gin-gonic/gin/render e github.com/golang/protobuf/proto e github.com/mattn/go-isatty e github.com/ugorji/go/codec e gopkg.in/go-playground/validator.v8 e gopkg.in/yaml.v2 pl govendor-example m github.com/json-iterator/go m golang.org/x/sys/unix
govendor list -v fmt
s fmt ├── e github.com/gin-contrib/sse ├── e github.com/gin-gonic/gin ├── e github.com/gin-gonic/gin/render ├── e github.com/golang/protobuf/proto ├── e github.com/ugorji/go/codec ├── e gopkg.in/go-playground/validator.v8 ├── e gopkg.in/yaml.v2 └── pl govendor-example
govendor fetch golang.org/x/net/context
$GOPATH
govendor fetch golang.org/x/net/context@a4bbce9fcae005b22ae5443f6af064d80a6f5a55 govendor fetch golang.org/x/net/context@v1 # Get latest v1.*.* tag or branch. govendor fetch golang.org/x/net/context@=v1 # Get the tag or branch named "v1".
govendor fmt +local
vendor
govendor install +local
govendor test +local
govendor install +vendor,^program
vendor
vendor
govendor fetch +out
$GOPATH
govendor update +vendor
vendor
$GOPATH
aktualisieren Paket in govendor update -uncommitted <updated-package-import-path>
$GOPATH
vendor
Fork aktualisieren, aber es wurde noch nicht zusammengeführt Codepaketgovendor fetch github.com/normal/pkg::github.com/myfork/pkg
myfork
normal
aufgezeichnet. Wie kann ich Aktualisierungen abrufen? gefunden über
子命令 | 功能 |
---|---|
init | 创建 vendor 目录和 vendor.json 文件 |
list | 列出&过滤依赖包及其状态 |
add | 从 $GOPATH 复制包到项目 vendor 目录 |
update | 从 $GOPATH 更新依赖包到项目 vendor 目录 |
remove | 从 vendor 目录移除依赖的包 |
status | 列出所有缺失、过期和修改过的包 |
fetch | 从远程仓库添加或更新包到项目 vendor 目录(不会存储到 $GOPATH ) |
sync | 根据 vendor.json 拉取相匹配的包到 vendor 目录 |
migrate | 从其他基于 vendor 实现的包管理工具中一键迁移 |
get | 与 go get 类似,将包下载到 $GOPATH ,再将依赖包复制到 vendor 目录 |
license | 列出所有依赖包的 LICENSE |
shell | 可一次性运行多个 govendor 命令 |
状态 | 缩写 | 含义 |
---|---|---|
+local | l | 本地包,即项目内部编写的包 |
+external | e | 外部包,即在 GOPATH 中、却不在项目 vendor 目录 |
+vendor | v | 已在 vendor 目录下的包 |
+std | s | 标准库里的包 |
+excluded | x | 明确被排除的外部包 |
+unused | u | 未使用的包,即在 vendor 目录下,但项目中并未引用到 |
+missing | m | 被引用了但却找不到的包 |
+program | p | 主程序包,即可被编译为执行文件的包 |
+outside | 相当于状态为 +external +missing
|
|
+all | 所有包 |
Die Unterbefehle, die Statusparameter unterstützen, sind: list
, add
, update
, remove
, fetch
Das Tolle ist, dass der Beamte ab der Go-Version 1.11 leistungsfähigere Go-Module integriert hat, um die chaotische Situation der Go-Paketabhängigkeitsverwaltung über viele Jahre hinweg zu vereinheitlichen (das von Go offiziell eingeführte Dep-Tool). bevor es fast tot geboren wurde) und wird in Version 1.13 standardmäßig offiziell aktiviert.
Es wurde von der Community bevorzugt und dringend empfohlen. Es wird empfohlen, dass neue Projekte Go-Module verwenden.
Das obige ist der detaillierte Inhalt vonEine kurze Diskussion über govendor, das Go-Tool zur Paketabhängigkeitsverwaltung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!