Heim > häufiges Problem > Hauptteil

Eine kurze Diskussion über govendor, das Go-Tool zur Paketabhängigkeitsverwaltung

little bottle
Freigeben: 2019-04-29 13:45:28
nach vorne
3765 Leute haben es durchsucht
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.

Anbieterfunktionen

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:

  • Das Anbieterverzeichnis unter dem aktuellen Paket
  • Aufwärtsverzeichnis Suchen Sie, bis Sie das Anbieterverzeichnis unter src finden
  • Suchen Sie im GOROOT-Verzeichnis
  • Suchen Sie nach abhängigen Paketen unter GOPATH

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.

Empfehlungen zur Verwendung durch den Anbieter

  • Ein Bibliotheksprojekt (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-Einführung

Govendor ist eine Paketverwaltung, die auf dem vendor-Verzeichnis basiert Mechanismuswerkzeug.

  • unterstützt die Analyse abhängiger Pakete aus dem Projektquellcode und deren Kopieren aus $GOPATH in das Verzeichnis vendor des Projekts.
  • unterstützt die angegebene Version des Pakets und verwendet vendor/vendor.json Führen Sie eine Paket- und Versionsverwaltung durch, die PHPs Composer
  • ähnelt und die Verwendung des Befehls
  • zum Kopieren abhängiger Pakete aus der Datei govendor add/update$GOPATH unterstützt ignoriert wird, kann es verwendet werden
  • Abhängigkeitspakete wiederherstellen
  • vendor/*/ kann direkt verwendet werden govendor sync Abhängigkeitspakete hinzufügen oder aktualisieren
  • Verfügbargovendor fetch Ein-Klick-Migration von anderen
  • Paketverwaltungstools zu
  • govendor migratevendorUnterstützt Linux, macOS, Windows und sogar alle vorhandenen Betriebssystemegovendor
  • Unterstützt Git, Hg, SVN, BZR (muss einen Pfad angeben)
  • Govendor-Verwendung
Anforderungen:

Das Projekt muss sich im

-Verzeichnis befinden
  • Wenn die Go-Version 1.5 ist, müssen Sie festlegen die Umgebungsvariablen manuell$GOPATH/src
  • set GO15VENDOREXPERIMENT=1Installieren
  • go get -u github.com/kardianos/govendor
    Nach dem Login kopieren
Um

bequem und schnell nutzen zu können, empfiehlt es sich,

zu PATH hinzuzufügen. Linux/macOS ist wie folgt eingestellt:

export PATH="$GOPATH/bin:$PATH"
Nach dem Login kopieren
govendorInitialisierung$GOPATH/bin

Führen Sie den folgenden Befehl im Projektstammverzeichnis aus, um

zu initialisieren:

govendor init
Nach dem Login kopieren

Es wird automatisch generiert in das Projektstammverzeichnisvendor Verzeichnisse und

Dateien. Zu diesem Zeitpunkt lautet der Inhalt der Datei

: vendor

{
    "comment": "",
    "ignore": "test",
    "package": [],
    "rootPath": "govendor-example"
}
Nach dem Login kopieren
vendor.jsonAllgemeine Befehlevendor.json

Kopieren Sie alle Pakete, auf die verwiesen wurde, und unter

in das Verzeichnis
  • $GOPATH
    govendor add +external
    Nach dem Login kopieren
    vendor
  • Kopieren Sie nur das angegebene Paket aus
  • govendor add gopkg.in/yaml.v2
    Nach dem Login kopieren
    $GOPATH
  • Listen Sie alle im Code referenzierten Pakete und deren Status auf
    govendor list
    Nach dem Login kopieren
     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
    Nach dem Login kopieren
  • Listet auf, welche Pakete auf ein Paket verweisen
    govendor list -v fmt
    Nach dem Login kopieren
     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
    Nach dem Login kopieren
  • Fügen Sie ein Paket aus dem Remote-Repository hinzu oder aktualisieren Sie es (
wird nicht
    in
  • Außerdem eine Kopie speichern)
    govendor fetch golang.org/x/net/context
    Nach dem Login kopieren
    $GOPATH
  • Installieren Sie die angegebene Version des Pakets
    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".
    Nach dem Login kopieren
  • Formatieren Sie nur den projekteigenen Code (
ändert sich nicht)
  • govendor fmt +local
    Nach dem Login kopieren
    vendor
  • Nur ​​Pakete innerhalb des kompilierten Projekts erstellen
    govendor install +local
    Nach dem Login kopieren
  • Nur ​​Testfälle innerhalb des Projekts testen
    govendor test +local
    Nach dem Login kopieren
  • Alle
Pakete erstellen
  • govendor install +vendor,^program
    Nach dem Login kopieren
    vendor
  • Alle abhängigen Pakete in das Verzeichnis
ziehen (einschließlich
    vorhandener oder nicht vorhandener Pakete)
  • Das Paket vendor
    govendor fetch +out
    Nach dem Login kopieren
    $GOPATH
  • befindet sich bereits im Verzeichnis
, aber ich möchte es von
  • govendor update +vendor
    Nach dem Login kopieren
    vendor$GOPATH aktualisieren Paket in
  • . Jetzt möchte ich das geänderte und nicht festgeschriebene Paket auf
  • govendor update -uncommitted <updated-package-import-path>
    Nach dem Login kopieren
    $GOPATHvendorFork aktualisieren, aber es wurde noch nicht zusammengeführt Codepaket
govendor fetch github.com/normal/pkg::github.com/myfork/pkg
Nach dem Login kopieren
    ruft jetzt Code von
  • statt von
  • ab. Informationen zu Abhängigkeitspaketen werden im

myforknormal aufgezeichnet. Wie kann ich Aktualisierungen abrufen? gefunden über

Oder lesen Sie
    , um zu sehen, wie das Quellpaket implementiert ist.
  • 子命令 功能
    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 命令

    Govendor-Statusparameter

    状态 缩写 含义
    +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

    Go-Module

    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!

Verwandte Etiketten:
Quelle:segmentfault.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!