ホームページ >バックエンド開発 >Golang >-u を使用すると、同じパッケージの 2 つのバージョンをダウンロードするのはなぜですか

-u を使用すると、同じパッケージの 2 つのバージョンをダウンロードするのはなぜですか

WBOY
WBOY転載
2024-02-12 22:00:11659ブラウズ

为什么 go get 在使用 -u 时会下载同一包的两个版本

#php エディターの Xiaoxin が、「go get -u」コマンドを使用すると同じパッケージの 2 つのバージョンがダウンロードされる理由を説明しています。この問題の原因は go mod の仕組みにあります。 go mod は、バージョン 1.11 の Go 言語で導入された依存関係管理ツールで、プロジェクトの go.mod ファイルに基づいて依存関係パッケージを自動的にダウンロードして管理します。 「go get -u」コマンドを使用すると、go.mod ファイル内の依存関係パッケージのバージョンがチェックされ、最新バージョンのダウンロードが試行されます。ただし、一部のパッケージのバージョン更新は他のパッケージの異なるバージョンに依存する場合があるため、go mod は依存関係を満たすために 2 つのバージョンのパッケージをダウンロードします。そのため、同じパッケージの 2 つのバージョンがダウンロードされます。

質問の内容

go get -u を使用して、golang.org/x/[email protected] に依存するパッケージを取得します。最初に golang.org/x/[email protected] がダウンロードされ、次に golang.org/x/[email protected] がダウンロードされることに気付きました。

その後、go clean -modcachego get golang.org/x/text を実行すると、golang.org/x/text ## がダウンロードされました。 #v0.4.0 に続いて、go get -u entgo.io/ent を再度実行します。今回は Go はダウンロードされませんでした golang.org/x/[email protected]

では、なぜ

go get -u は最新バージョンがローカルで利用できない場合に古いバージョンと最新バージョンの両方をダウンロードし、最新バージョンが利用可能な場合に古いバージョンをダウンロードしないのはなぜでしょうか。地元で?

解決策

これは 2 段階のプロセスであるため、

    依存関係を取得する
  1. 依存関係を更新する
プログラミングの観点から見ると、これらを「最新の依存関係の取得」という 1 つの懸念事項に統合する正当な理由はありません。

go コマンド ドキュメントより :

-u フラグは、利用可能な場合は新しいマイナー バージョンまたはパッチ バージョンを使用するように、コマンド ラインで指定されたパッケージの依存関係を提供するモジュールを更新するように指示します。

これは、

-u が、フェッチしたパッケージのモジュールではなく、フェッチしたパッケージが依存するモジュールを特に扱うことを意味します。

さらに、

-u は、バージョン v0 の変更をメジャー バージョンの変更として扱うという Go の慣用句とは何の関係もないようなので、簡単に推奨することはできません。原則 -ugolang.org/x/test の readme ファイルには次のように書かれています:

x/text バージョンが 1.0.0 に達するまで、マイナー バージョンはメジャーとみなされます。したがって、0.1.0 から 0.2.0 への移行はメジャー バージョンのアップグレードとみなされます。

以上が-u を使用すると、同じパッケージの 2 つのバージョンをダウンロードするのはなぜですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。