「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Go Struct タグで変数を使用できないのはなぜですか?

Go Struct タグで変数を使用できないのはなぜですか?

2024 年 11 月 5 日に公開
ブラウズ:156

Why Can\'t I Use Variables in Go Struct Tags?

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 ツールによって使用されます。これらのツールでは、必要なコードを適切に生成するために、コンパイル時にタグ値が認識されている必要があります。

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3