ホームページ > バックエンド開発 > Golang > `//go:build と // build: Go ではどちらの条件付きコンパイル ディレクティブを使用する必要がありますか?`

`//go:build と // build: Go ではどちらの条件付きコンパイル ディレクティブを使用する必要がありますか?`

Patricia Arquette
リリース: 2024-12-10 11:08:18
オリジナル
318 人が閲覧しました

`//go:build vs //  build: Which Conditional Compilation Directive Should You Use in Go?`

//go:build vs // build: 条件付きコンパイルの新時代

ジレンマ

次の Go コード スニペット:

//go:build (386 || amd64 || amd64p32) && gccgo
// +build 386 amd64 amd64p32
// +build gccgo

package cpu
ログイン後にコピー

ビルドとしてtag, // ビルドで十分のようです。 //go:build が明示的に指定されたのはなぜですか? // build には広範なドキュメントがあるのに、// go:build のドキュメントを見つけるのはなぜ難しいのでしょうか?

Go 1.18: 新しいパス

新しいディレクティブ / /go:build が条件付きコンパイルのアプローチとして推奨されており、ツールチェーンは古い // ビルドを積極的に削除します。

Go 1.17: //go:build

//go:build の導入は、// build を置き換えるために Go 1.17 で導入されました。これにはいくつかの利点があります。

  • 他の Go ディレクティブとの一貫性 (例: //go:generate)
  • 明示的なブール式のサポート (例: //go:build foo && bar)
  • Go fmt の互換性。ディレクティブを自動的に修正します。配置

共存と移行

スムーズな移行のために両方のディレクティブが共存します。

構文の変更と互換性

  • Go ビルドの優先順位を付ける//go:build over // build
  • //go:build 単独ではビルド失敗ではなくなりました
  • 配置ミスされた //go:build ディレクティブが検出され、移動されます
  • Go fmt は //go:build 式を修正します
  • Gofmt は //go:build when を追加します// ビルドのみが存在します
  • Gofmt は // go:build と一致するようにビルドを更新します
  • Go vet が //go:build と // build の間の不一致をチェックします

移動中Forward

//go:build は、Go の条件付きコンパイルに推奨されるアプローチです。改善された構文、Go fmt との互換性、// build との共存により、将来の Go 開発へのシームレスな移行が保証されます。

以上が`//go:build と // build: Go ではどちらの条件付きコンパイル ディレクティブを使用する必要がありますか?`の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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