ホームページ >バックエンド開発 >Golang >Go 1.17 の `//go:build`: 条件付きコンパイルの `// build` との違いは何ですか?

Go 1.17 の `//go:build`: 条件付きコンパイルの `// build` との違いは何ですか?

DDD
DDDオリジナル
2024-12-19 09:26:09509ブラウズ

Go 1.17's `//go:build`: How Does it Differ from `//  build` for Conditional Compilation?

//go:build ディレクティブと // build ディレクティブの違い

//go:build ディレクティブは、新しい条件付きコンパイル ディレクティブです。 Go 1.17 で導入され、// build ディレクティブを置き換えることを目的としています。どちらのディレクティブでもファイルをパッケージに含める条件を指定できますが、//go:build ではいくつかの重要な改善点が提供されています。

  • 一貫性: // go:build 構文は、他の既存の Go ディレクティブやプラグマと一貫性があります。 //go:generate.
  • 拡張式: //go:build は標準のブール式 (例: //go:build foo && bar) をサポートしますが、 // build はあまり直感的ではありませんAND (カンマ) と OR (スペース) の構文。
  • コードフォーマット: //go:build ディレクティブは gofmt によって自動的にフォーマットされます。これにより、ディレクティブとパッケージ ステートメントの間に空白行を残さないなどのよくある間違いが回避されます。

Go 1.18 では、//go:build が優先ディレクティブとして挙げられ、// build は段階的に削除される予定です。線。 2 つのディレクティブ間の移行は次のように処理されます。

  • Go 1.18 以降では、//go:build が主要なビルド制約ディレクティブです。
  • ファイルに // がない場合は、 go:build ディレクティブ、// build ディレクティブは引き続き適用されます。
  • ファイルに両方が含まれている場合//go:build および // build ディレクティブ。 //go:build は信頼できるソースとみなされ、 gofmt は // 一致するように build を更新します。

以上がGo 1.17 の `//go:build`: 条件付きコンパイルの `// build` との違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。