Go言語の構造体のタグの使い方と用途をサンプルコードを使って解説します!
他の言語にないため、ちょっと理解するのに苦労しますよね。
そこで今回、丁寧にタグを使う理由や使い方を記事にしました。
構造体のタグの用途、使いみちは何?
Go言語では構造体のフィールドにメタデータを付加するために、構造体タグが使用されます。
このメタデータは他のコードが構造体とやり取りする方法を理解するために使います。構造体タグは、構造体フィールドの宣言の直後に文字列リテラルとして指定されます。
具体的な用途としてはこれらに使われます。とくに【3】です。
- シリアライゼーションとデシリアライゼーション: 構造体タグは、JSON、XML、CSVなどの形式でデータをエンコードおよびデコードする際に一般的に使用されます。タグは、構造体のフィールドをエンコードされたデータのキーまたは属性にどのようにマッピングするかを指定します。
- データ検証: 構造体タグは、構造体のフィールドのデータを検証するために使用できます。例えば、タグは、フィールドが必須であること、または有効なメールアドレスであることを指定することができます。
- データベースのマッピング: 構造体タグは、構造体のフィールドをデータベーステーブルの列にマップするためによく使用されます。タグには、列の名前、データ型、およびデータベースドライバで必要な他のメタデータを指定できます。
- 依存関係の注入: 構造体タグは、依存関係を構造体に注入するために使用できます。特定の依存関係でフィールドを埋める必要がある場合、タグにフィールド名を指定することができます。
構造体タグの具体的な使い方のサンプルコード
Goで構造体タグを使用する一般的な用途のサンプルコードです。
type Person struct {
Name string `json:"name" validate:"required"`
Age int `json:"age"`
Email string `json:"email" validate:"email"`
Password string `json:"-"`
}
この例ではPerson構造体は4つのタグを持つフィールドを持っています。
jsonタグは構造体のJSON表現でフィールドの名前を指定するために使用されます。validateタグは、フィールドの検証ルールを指定するために使用されます。
passwordフィールドは、–タグでマークされており、構造体を使用するコードによって無視されることを示しています。
データベースのカラムをマッピング
典型的な使い方はデータベースをGoの構造体としてマッピングする場合です。GormとかのORマッパーでも使います。
この場合、構造体のフィールドは、ータベースのカラムにマップされます。構造体タグはデータベースカラムの名前、型、およびその他のオプションを指定するために使用されます。
以下は、例として構造体タグを使用した構造体の定義です。
type Person struct {
Name string `json:"name" xml:"name"`
Age int `json:"age" xml:"age"`
}
この例ではjsonとxmlの2つの構造体タグが使用されています。これらのタグはJSONおよびXMLのシリアル化に使用されます。たとえば、json:”name”タグは、JSONシリアル化時にNameフィールドをnameという名前のキーでシリアル化することを示します。同様に、xml:”name”タグは、XMLシリアル化時にNameフィールドをnameというタグでシリアル化することを示します。
まとめ
このように構造体タグは構造体のフィールドを処理する方法を指定するために使用されます。これは、シリアル化、デシリアル化、データベースマッピングなど、さまざまな場面で使用されます。