すべてのモジュールを更新する 質問する

すべてのモジュールを更新する 質問する

このモジュールを例として使用します (特定のコミットを使用して、他の人も私が見ているものを見ることができるようにします):

git clone git://github.com/walles/moar
Set-Location moar
git checkout d24acdbf

Go に「すべてを更新する」ように指示する方法が欲しいです。モジュールがすべての最新バージョンで動作すると仮定します。以下は、これを行うために私が見つけた 5 つの方法です。それぞれがクリーンなクローン上で実行されるものとします。これはgo.mod19 行の になります。

go get -u

結果はgo.mod14 行になります:

go get -u
go mod tidy

結果はgo.mod13 行になります:

go mod tidy

内のすべてを手動で削除して をrequire実行するgo mod tidyと、12 行になります。 内のすべてを手動で削除して を実行requireするとgo get -u、11 行になります。 私の質問は、なぜこれらのメソッドが異なる結果を生成するのか、そして私がやろうとしていることを実行する「正しい方法」は何なのかということです。

ベストアンサー1

要約:

あなたが望むのはこれです:

go get -u
go mod tidy

サブディレクトリ内のパッケージを再帰的に更新するには、次のようにします。

go get -u ./...

目にする不一致は、ソフトウェアの本質的な有機的性質によるものです。

あなたの例を使用すると、コミットはおそらくメンテナーによって実行されずにチェックインされたd24acdbfと考えられます (19 行が長くなっている理由を説明しています)。メンテナーが実行していた場合は、最後に表示される 13 行のバージョンが表示されます。git://github.com/walles/moargo mod tidy

go get -u単独では、依存関係の取り込みがより積極的です。また、依存関係を最新の (互換性のある) バージョンに更新するという単なる事実によって、新しい直接的または間接的な依存関係が取り込まれる可能性があります。これを明日試した場合、これらの依存関係はさらに大きくなる可能性があります (一部のサブ依存関係の最新バージョンでは新しい機能が追加されているため、新しい依存関係が必要になります)。そのため、リポジトリのメンテナーが特定の (最新ではない) バージョンで修正するのには正当な理由がある可能性があります。

行くモッド整頓この積極的な依存関係分析をクリーンアップします。

go mod tidyPS:追跡後に依存関係が縮小するという誤解がよくありますがgo.sum、場合によってはこのファイルはtidy(この場合はそうではありませんが)後に大きくなります。

おすすめ記事