Go のマクロ: シンボル置換の物語
多くのプログラミング言語で定番のマクロは、シンボル名を定義する便利な方法を提供しますコンパイル中に展開されます。ただし、Go は異なるアプローチをとります。マクロを避けますが、次の 2 つの代替メカニズムを採用しています:
1。コード生成によるメタプログラミング
この手法には、ユーザー定義の構成またはデータに基づいて実行時にコードを生成することが含まれます。これにより、非常に動的で柔軟なプログラムが可能になります。
2.リンク時のシンボル置換
このメカニズムにより、プログラムの読み取り専用データ セグメント内の特定のシンボルを置換できます。これは、ビルド時に定数を調整するための、制御された予測可能な方法を提供します。
当面の問題については、後者のアプローチの方が、C で #define マクロを使用するのに適しています。 Go で実装する方法は次のとおりです。
シンボル置換の利用
任意の便利なパッケージで、実行時に変更したい文字列定数 (Bar など) を定義します。パッケージ foo.
内で、コンパイル中に -ldflags オプションを go build または go install に渡します。 command:
$ go install -ldflags='-X foo.Bar="my super cool string"'
これにより、リンク時に、結果のバイナリ内の定数 foo.Bar が値「my super Cool string」に置き換えられます。この値はプログラムのコードからアクセスできるようになります。
以上がGo はマクロを使用せずに C マクロの機能をどのように実現しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。