1. ホーム
  2. go

[解決済み] 全モジュールのアップデートを行う

2022-03-06 12:03:43

質問

このモジュールを例にとると(他の人にもわかるように特定のコミットで を参照してください)。

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

私はGoに"update everything"を指示する方法が欲しいです。このモジュールは は、すべての最新バージョンで動作します。以下は、私が見つけた5つの方法です。 それぞれをクリーンなクローン上で実行すると仮定します。この結果 go.mod の19 の行があります。

go get -u

この結果 go.mod を14行に分割しています。

go get -u
go mod tidy

この結果 go.mod を13行に分割しています。

go mod tidy

をすべて手動で削除すると require を実行し go mod tidy となります。 12行です。もし私が手動で require を実行し go get -u 11行になります。質問ですが、なぜこれらの方法が異なる また、私が行おうとしていることを行うための正しい方法は何でしょうか?

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

tl;dr;

ということです。

go get -u
go mod tidy


あなたが見ている不整合は、ソフトウェアが本来持っている有機的な性質に起因しています。

あなたの例では、コミット d24acdbfgit://github.com/walles/moar を実行せずにメンテナがチェックインした可能性が高いです。 go mod tidy (19行と長いのはそのためです)。もしメンテナがそうしていれば、最後に表示される13行のバージョンを見ることができます。

go get -u は、それだけで依存関係をより積極的に引き込むことができます。また、依存関係を最新(互換)バージョンに更新するだけで、それ自体が新しい直接・間接的な依存関係を引き込む可能性があります。これらの依存関係は、もし明日これを試したら、さらに大きくなるかもしれません(あるサブ依存関係の最新バージョンは新しい機能を追加するので、新しい依存関係を必要とします)。ですから、レポのメンテナが特定の(最新ではない)バージョンで修正するのには、正当な理由があるのでしょう。

ゴー・モッド・ティディ は、この積極的な依存性分析をクリーンアップします。

追伸:よくある誤解なのですが、依存関係が縮小するのは go mod tidy : 追跡 go.sum の後、このファイルが大きくなる場合があります。 tidy (ただし、この場合ではありません)