Go 構造体タグでの変数の使用
Go では、構造体タグを使用して、構造体内のフィールドに関するメタデータを指定します。文字列リテラルを使用してタグを定義することは可能ですが、その場所で変数を使用しようとするとエラーが発生します。
無効な使用法:
const ( TYPE = "type" ) type Shape struct { Type string fmt.Sprintf("json:\"%s\"", TYPE) }
このコードはスローしますfmt.Sprintf ステートメントを使用してタグ値を動的に生成しようとしているため、構文エラーが発生します。 Go では、構造体タグがコンパイル時の文字列リテラルである必要があります。
有効な使用法:
type Shape struct { Type string `json:"type"` }
この例では、タグは文字列リテラルとして定義されています。これは、構造体タグを指定する正しい方法です。
説明:
有効な例と無効な例の主な違いは、評価時間にあります。文字列リテラルはコンパイル時に評価されますが、fmt.Sprintf ステートメントは実行時に評価されます。 Struct タグは、コンパイル中に JSON エンコーダーやデコーダーなどのさまざまな Go ツールによって使用されます。これらのツールでは、必要なコードを適切に生成するために、コンパイル時にタグ値を認識する必要があります。
以上がGo Struct タグで変数を使用できないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。