「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Go の条件付きコンパイルにおける `//go:build` と `// +build` の主な違いは何ですか?

Go の条件付きコンパイルにおける `//go:build` と `// +build` の主な違いは何ですか?

2024 年 12 月 22 日に公開
ブラウズ:149

What are the key differences between `//go:build` and `//  build` in Go's conditional compilation?

//go:build と // build の違い

Go 1.17 では、//go:build という名前の新しい条件付きコンパイル ディレクティブが、古い // build ディレクティブ。どちらのディレクティブもビルド制約を指定するという同じ目的を果たしますが、//go:build.

構文の違い:

  • //go:build を使用することにはいくつかの重要な違いと利点があります。 //go:generate など、他の Go ディレクティブと同様の構文に従います。これは引数としてブール式を受け取り、コンパイル中にファイルをパッケージに含めるかどうかを決定します。一方、
  • // build はあまり直感的ではない構文を使用します。ファイルを含めるプラットフォームまたは条件を指定するタグのカンマ区切りリストを受け入れます。

実装の詳細:

  • Go バージョン 1.17 以降では、 // go:build は優先ディレクティブであり、Go 1.18 リリースで説明されているように、ツールチェーンによって積極的に削除されます。 Notes.
  • // ビルドは、スムーズな移行を確保するために、いくつかの Go リリースで引き続きサポートされますが、新しいバージョンではその使用は推奨されません。

//go の利点:build:

  • Consistency: //go:build は Go の他のビルドと一致します
  • 改善された構文: //go:build は、& と || を使用した、より標準的なブール式構文を提供します。それぞれ AND 条件と OR 条件の場合。これは、AND にカンマを使用し、OR にスペースを使用した // build とは対照的です。
  • Go fmt Support: //go:build は go fmt によってサポートされており、誤った問題は自動的に修正されます。ソースファイル内のディレクティブの配置。これは、ディレクティブとパッケージ ステートメントの間に空白行を残さないなど、よくある間違いを回避するのに役立ちます。
  • 詳細なエラー メッセージ: //go:build は、コンパイル中にさらに詳細なエラー メッセージを提供します。ビルド制約に関する問題を特定するのに役立ちます。

使用法:

どちらのディレクティブもビルドを指定するために使用されます。制約があるため、一般的には //go:build の方が有利です。両方のディレクティブの使用法を示す例を次に示します:

//go:build linux && amd64
package main

//  build linux,amd64
package main

この例では、両方のディレクティブで同じ結果が得られます。つまり、Linux および 64 ビット AMD アーキテクチャ用にコンパイルする場合にのみメイン パッケージがインクルードされます。

結論:

//go:build には、一貫した構文、改善されたエラー メッセージ、go fmt サポートなど、// build に比べていくつかの利点があります。これは、Go 1.17 以降でビルド制約を指定する場合に推奨されるディレクティブです。

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3