ホームページ > よくある問題 > Go パッケージの依存関係管理ツールである govendor についての簡単な説明

Go パッケージの依存関係管理ツールである govendor についての簡単な説明

little bottle
リリース: 2019-04-29 13:45:28
転載
3819 人が閲覧しました
govendor は、vendor メカニズムに基づく Go パッケージの依存関係管理コマンド ライン ツールです。ネイティブ ベンダーとの非侵入的な統合、および他の依存関係管理ツールからの移行もサポートしており、異なるプロジェクトでの同じパッケージの異なるバージョンの開発と管理を、相互侵入することなく簡単に実現できます。

ベンダーの機能

当初、Go はこれより適切なパッケージ管理ツールを提供していませんでした。ベンダー機能はバージョン 1.5 から提供されていますが、環境変数 GO15VENDOREXPERIMENT=1 を手動で設定する必要があります。

go build または go run コマンドを実行すると、パッケージは次の順序で検索されます。

  • 次の順序でパッケージが検索されます。現在のパッケージのディレクトリ
  • src の下にベンダー ディレクトリが見つかるまで上のディレクトリを検索します。
  • GOROOT ディレクトリを検索します。
  • GOPATH の下にある依存パッケージを探します

バージョン 1.6 がリリースされたとき、この環境変数の値はデフォルトで 1 に設定されていました。この値は、go env コマンドを使用して表示できます。

バージョン 1.7 がリリースされたとき、この環境変数は削除され、vendor 機能がデフォルトで有効になりました。

ベンダーの使用に関する推奨事項

  • ライブラリ プロジェクト (main を含まない package) は、外部ファイルを独自のバージョンで保存しないでください。 control 特別な理由がなく、これを行う理由がわかっている場合を除き、パッケージは vendor ディレクトリにあります。
  • アプリケーション (main を含む package) では、vendor ディレクトリを 1 つだけ存在することをお勧めします。コードベースレベルのディレクトリにあります。

    関連チュートリアル: go ビデオ チュートリアル

govendor の概要

govendor は、vendor## に基づくディレクトリです。 # メカニカルパッケージ管理ツール。

    プロジェクトのソース コードからの依存パッケージの分析と、
  • $GOPATH からプロジェクトの vendor ディレクトリへのコピーをサポートします
  • サポートされていますパッケージのバージョンを指定し、パッケージとバージョンの管理に
  • vendor/vendor.json を使用します。これは、PHP の Composer
  • govendor を使用してサポートするのと同様です。 add/ update コマンドは、$GOPATH
  • から依存パッケージをコピーします。
  • vendor/*/ ファイルが無視される場合は、govendor を使用できます。 sync は依存関係を復元します。 パッケージ
  • は直接使用できます。
  • govendor fetch は依存パッケージを追加または更新します。
  • 利用可能な
  • govendor merge は他のパッケージから使用できます。 vendor パッケージ管理ツール govendor へのワンクリック移行
  • Linux、macOS、Windows、さらには既存のすべてのオペレーティング システムをサポート
  • Git、 Hg、SVN、BZR (パスを指定する必要があります)
govendor を使用するための要件

:

    プロジェクトは
  • にある必要があります。 $GOPATH/src directory
  • Go バージョンが 1.5 の場合は、環境変数
  • set GO15VENDOREXPERIMENT=1
installation## を手動で設定する必要があります。 #
go get -u github.com/kardianos/govendor
ログイン後にコピー

利便性と迅速な使用のために、

govendor

を PATH に $GOPATH/bin を追加することをお勧めします。 Linux/macOS の設定は次のとおりです。 <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false;">export PATH=&quot;$GOPATH/bin:$PATH&quot;</pre><div class="contentsignin">ログイン後にコピー</div></div>Initialization

vendor

Initialization のプロジェクト ルート ディレクトリで次のコマンドを実行します。プロジェクトのルート ディレクトリ、つまり vendor ディレクトリと

vendor.json

ファイルが自動的に生成されます。この時点で、vendor.json ファイルの内容は次のとおりです。 <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false;">govendor init</pre><div class="contentsignin">ログイン後にコピー</div></div>Common Commands

が参照され、

$GOPATH## の下にあります。 # パッケージを

vendor
    ディレクトリにコピーします
  • <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false;">{ &quot;comment&quot;: &quot;&quot;, &quot;ignore&quot;: &quot;test&quot;, &quot;package&quot;: [], &quot;rootPath&quot;: &quot;govendor-example&quot; }</pre><div class="contentsignin">ログイン後にコピー</div></div>指定されたパッケージのみを $GOPATH
    govendor add +external
    ログイン後にコピー
    ## からコピーします
  • #コード内で参照されているすべてのパッケージとそのステータスをリストします
    govendor add gopkg.in/yaml.v2
    ログイン後にコピー
    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
    ログイン後にコピー
リモートからウェアハウスにパッケージを追加または更新します (
    はコピーを
  • $GOPATH
  • に保存しません)
     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
    ログイン後にコピー
  • 指定されたバージョンのpackage<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false;">govendor fetch golang.org/x/net/context</pre><div class="contentsignin">ログイン後にコピー</div></div>
  • プロジェクト独自のコードのみをフォーマットします (
vendor
    ディレクトリは変更しません)
  • 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".
    ログイン後にコピー
    ビルドとプロジェクトの内部コードをコンパイルします。 パッケージ
  • <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false;">govendor fmt +local</pre><div class="contentsignin">ログイン後にコピー</div></div>
  • プロジェクト内のテスト ケースのみをテストします。
    govendor install +local
    ログイン後にコピー
  • すべてをビルドします。
vendor
    パッケージ
  • govendor test +local
    ログイン後にコピー
    すべての依存パッケージを
  • vendor ディレクトリにプルします ($GOPATH
  • 既存または存在しないパッケージを含む)
    govendor install +vendor,^program
    ログイン後にコピー
  • パッケージはすでに vendor ディレクトリにありますが、$GOPATH
    govendor fetch +out
    ログイン後にコピー
  • ## から更新したいと考えています#変更されました $GOPATH ここで、変更されてコミットされていないパッケージを vendor
govendor update +vendor
ログイン後にコピー
  • パッケージにフォークして更新したいのですが、まだマージされていません。どうすればよいですか? 最新のコード パッケージ
    govendor update -uncommitted <updated-package-import-path>
    ログイン後にコピー
    を参照すると、normal
  • ではなく
myfork
    からコードがプルされるようになります。

vendor.json は、依存関係パッケージの情報、更新を取得する方法を記録します<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false;">govendor fetch github.com/normal/pkg::github.com/myfork/pkg</pre><div class="contentsignin">ログイン後にコピー</div></div>govendor サブコマンド<ul>各詳しい使用方法については、サブコマンドについては、<li>govendor COMMAND -h<code> を使用するか、github.com/kardianos/govendor/context を参照して、ソース コード パッケージがどのように実装されているかを確認できます。

## 建立#list列出&過濾依賴包及其狀態add從##update$GOPATH#removevendorstatus## fetch從遠端倉庫新增或更新套件到專案 目錄(不會儲存到 sync根據 拉取相符的套件到 #從其他基於vendor與go get$GOPATH列出所有依賴套件的LICENSE可一次執行多個govendorgovendor 狀態參數
子指令 功能
#init vendor 目錄和vendor.json 檔案
$GOPATH 複製套件到專案vendor 目錄
#從 更新依賴套件到專案vendor 目錄
目錄移除依賴的套件
列出所有缺失、過期和修改過的套件
vendor$GOPATH)
vendor.jsonvendor 目錄##migrate
實作的套件管理工具中一鍵遷移 #get
類似,將套件下載到,再將依賴套件複製到vendor 目錄license
shell
指令

狀態縮寫lGOPATH 中、卻不在項目vendor## vendor #已在 目錄下的套件 stds標準庫裡的套件 excludedx#明確被排除的外部套件 unusedu#未使用的套件,即在m programp主程式包,即可編譯為執行檔的套件
意義
local
本地包,即專案內部所寫的套件 externale外部包,即在
目錄 ##v
vendor
vendor
目錄下,但專案中並未引用到
missing
被引用了但卻找不到的套件

outside#相當於狀態為 external missing

all

###所有套件################支援狀態參數的子指令有:###list## #、###add###、###update###、###remove###、###fetch#########Go modules######普大喜奔的是,從Go 1.11 版本開始,官方已內建了更為強大的Go modules 來一統多年來Go 包依賴管理混亂的局面(Go 官方之前推出的dep 工具也幾乎胎死腹中),並且將在1.13版本中正式預設開啟。 ######目前已受到社群的看好和強烈推薦,建議新專案採用 Go modules。 ###

以上がGo パッケージの依存関係管理ツールである govendor についての簡単な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:segmentfault.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート