1. ホーム
  2. go

[解決済み] go mod vendor` コマンドの目的は何ですか?

2022-03-07 17:24:08

質問

その ドキュメンテーション と書かれています。

go mod vendor コマンドは、vendor という名前のディレクトリを メインモジュールのルートディレクトリには、すべてのパッケージのコピーが含まれています。 メインモジュールのパッケージのビルドとテストをサポートするために必要です。 メインモジュール外のパッケージのテストによってのみインポートされるパッケージがあります。 は含まれません。

golangbyexample は言う。

また、VCS(バージョン管理システム)のベンダーディレクトリを確認することもできます。 コントロールシステム)。これは 依存関係はすでに存在するため、実行時にダウンロードする必要があります。 VCSにチェックインされたベンダーフォルダで

私は、モジュール( go.mod , go.sum ) がバージョン管理の面倒をみてくれます。また、依存関係のダウンロードは、プログラムを最初に実行するときだけでいいと思います。

では、どのようにコマンド go mod vendor 便利ですか?その目的やユースケースは何でしょうか?

どのように解決するのですか?

Go モジュールはバージョン管理の面倒を見ますが、モジュールがインターネットから消えてしまったり、インターネットが利用できなくなったりした場合の面倒を見るとは限りません。モジュールが利用できない場合、コードをビルドすることはできません。

Go Proxyは、モジュールをミラーリングすることで、消えていくモジュールをある程度緩和しますが、すべてのモジュールに対して、常にそれを行うとは限りません。

<ブロッククオート

以前は利用できたモジュールが、なぜミラーで利用できなくなったのですか?

proxy.golang.org は、すべてのモジュールを永久に保存するわけではありません。理由はいくつかありますが、proxy.golang.orgが適切なライセンスを検出できない場合がその一つです。この場合、一時的にキャッシュされたモジュールのコピーだけが利用可能になり、元のソースから削除され古くなると利用できなくなる可能性があります。チェックサムは、ミラーで利用できなくなったかどうかに関係なく、チェックサムデータベースに残ります。

詳しくはこちらでご覧ください。 https://proxy.golang.org/

別の方法として、モジュールをフォークして Goモジュール replace ディレクティブ で、インポートパスを別のもの、例えばあなたのフォークにリダイレクトすることができます。 go.mod ファイルを変更することなく使用できます。この方法は colm.anseo .

インターネットアクセスについてですが、大規模なサーバーファームを運営しており、複数のマシンにコードが必要な場合、インターネットからファーム内のすべてのマシンにダウンロードすることは非効率的であり、セキュリティリスクにもなります。それよりも go mod vendor を内部レポにコピーして、これを持ち歩く。大企業では、データセンター内の複数のサーバーにコードを配備するために、内部的な方法を用いています。