依存関係をコンパイルするために Go のどのバージョンが使用されますか?

王林
リリース: 2024-02-08 23:50:21
転載
817 人が閲覧しました

使用什么版本的 Go 来编译依赖项?

php エディター Baicao が、依存関係のコンパイルにどのバージョンの Go を使用すればよいかについての質問に答えます。 Go コードをコンパイルするときは、依存関係のバージョンの選択が重要です。一般に、プロジェクトで安定して実行されることがわかっている Go バージョンと互換性のある依存関係バージョンを使用することをお勧めします。これにより、コードの安定性と互換性が保証されます。同時に、使用されている依存関係がまだメンテナンス中かどうか、および Go の最新バージョンと互換性のある更新があるかどうかも考慮する必要があります。プロジェクトの要件と依存関係の特性を総合的に考慮して、適切な Go バージョンを選択して依存関係をコンパイルすることで、プロジェクトの安定した動作を最大限に確保できます。

質問内容

Go プログラムをコンパイルするとき、メイン コードと依存コードを同じバージョンの Go でコンパイルしますか?

解決策

これは興味深い質問ですが、答えはやや微妙です。

Go の古いバージョンの場合、答えは簡単です。各依存関係は、ローカルで実行している Go のバージョンを使用してコンパイルされます。 Go 1.9 を実行していて、Go 1.10 用に依存関係が構築されている場合、コンパイラーは賢明にも Go 1.9 を使用して Go 1.10 コードをコンパイルしようとしません。その依存関係で新しい機能が使用されない限り、すべてが正常に動作します。同様に、Go 1.8 用に作成された依存関係がある場合は、Go 1.9 でもコンパイルされます。

ただし、最新バージョンの Go および go.mod ファイルを使用するプロジェクト (または依存関係) では、動作が異なります。 Go モジュール リファレンス から次のことを学びます:

  • モジュール内のパッケージの場合、コンパイラは go ディレクティブで指定されたバージョン以降に導入された言語機能の使用を拒否します。たとえば、モジュールに go 1.12 ディレクティブがある場合、そのパッケージは Go 1.13 で導入された 1_000_000 などの数値リテラルを使用できません。

これは、依存関係が 宣言されている Go バージョン で提供される機能のみを使用することを意味します。ただし、これらは依然として最新の Go ランタイムを使用して構築されています。したがって、Go バージョン (依存関係によって宣言されたバージョンよりも新しい) で見つかったパフォーマンスの強化、セキュリティの改善などは引き続き使用されます。

さらに、同じ文書の次の行には次のように書かれています:

  • 古い Go バージョンでモジュールのパッケージをビルドし、コンパイル エラーが発生した場合、エラーはモジュールが新しい Go バージョン用に作成されたことを示します。たとえば、モジュールのバージョンが 1.13 で、パッケージが数値リテラル 1_000_000 を使用するとします。パッケージが Go 1.12 を使用してビルドされている場合、コンパイラーはコードが Go 1.13 用に書かれたことを示します。

これは、Go 1.19 でプログラムをビルドしようとして、依存関係の 1 つがバージョン 1.20 を宣言していてコンパイル エラーが発生した場合、コンパイラの出力で潜在的な互換性の問題が通知されることを意味します。コンパイル エラーがなければ、違いに気付かないかもしれません (1.20 用に宣言されている依存関係は、実際には新しい 1.20 コンパイラ機能を使用していないためです)。

これは、エラーが発生しにくいループ変数のスコープ設定を前提として、おそらく Go 1.22 で以前よりも顕著な影響を与えるでしょう。 提案は受け入れられ、期限内に実装されます。この提案は、ループ変数が下位互換性のない方法で処理される方法を変更することになるためです。これが Go 1.22 に組み込まれると仮定すると、go 1.21 以前を宣言するモジュールは古いループ セマンティクスを使用し、go 1.22 以降を宣言するモジュールはすべて古いループ セマンティクスを使用することを意味します。新しいループ セマンティクスを使用します。おそらく正当な理由があるとはいえ、Go が下位互換性の約束に違反したのはこれが初めてです (ループ変数のせいでほとんどすべての人がトラブルに巻き込まれたため)。

以上が依存関係をコンパイルするために Go のどのバージョンが使用されますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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