Struct タグでの変数の使用
Go では、メタプログラミングの目的で struct タグで変数を使用できます。これにより、コンパイル時に構造体タグを動的に生成できます。
作業例
次のコードを考えてみましょう。
<code class="go">type Shape struct { Type string `json:"type"` }</code>
この例では、リテラル文字列は、フィールドの JSON 表現を指定するために json struct タグで使用されます。
fmt.Sprintf を使用する
ただし、fmt.Sprintf を使用して struct タグを構築します。動的には機能しません。次のコードは構文エラーになります:
<code class="go">const ( TYPE = "type" ) type Shape struct { Type string fmt.Sprintf("json:\"%s\"", TYPE) }</code>
この理由は、Go では struct タグで実行時に評価されるステートメントが許可されていないためです。コンパイル時の文字列リテラルのみが許可されます。
許可されない理由
パフォーマンスの問題を引き起こす可能性があるため、構造体タグでの変数の使用は Go では許可されません。 struct タグの値が動的に変更されると、予期しない形でプログラムの動作に影響を与える可能性があります。したがって、Go では、パフォーマンスと一貫性の理由から、構造体タグの使用を静的文字列リテラルに制限しています。
以上がGo の構造体タグで変数を使用できないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。