【Go言語】構造体のタグの使い方と用途をサンプルコードを使って解説

Go言語の構造体のタグの使い方と用途をサンプルコードを使って解説します!

他の言語にないため、ちょっと理解するのに苦労しますよね。

そこで今回、丁寧にタグを使う理由や使い方を記事にしました。

構造体のタグの用途、使いみちは何?

Go言語では構造体のフィールドにメタデータを付加するために、構造体タグが使用されます。

このメタデータは他のコードが構造体とやり取りする方法を理解するために使います。構造体タグは、構造体フィールドの宣言の直後に文字列リテラルとして指定されます。

具体的な用途としてはこれらに使われます。とくに【3】です。

  1. シリアライゼーションとデシリアライゼーション: 構造体タグは、JSON、XML、CSVなどの形式でデータをエンコードおよびデコードする際に一般的に使用されます。タグは、構造体のフィールドをエンコードされたデータのキーまたは属性にどのようにマッピングするかを指定します。
  2. データ検証: 構造体タグは、構造体のフィールドのデータを検証するために使用できます。例えば、タグは、フィールドが必須であること、または有効なメールアドレスであることを指定することができます。
  3. データベースのマッピング: 構造体タグは、構造体のフィールドをデータベーステーブルの列にマップするためによく使用されます。タグには、列の名前、データ型、およびデータベースドライバで必要な他のメタデータを指定できます。
  4. 依存関係の注入: 構造体タグは、依存関係を構造体に注入するために使用できます。特定の依存関係でフィールドを埋める必要がある場合、タグにフィールド名を指定することができます。

 

構造体タグの具体的な使い方のサンプルコード

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というタグでシリアル化することを示します。

 

まとめ

このように構造体タグは構造体のフィールドを処理する方法を指定するために使用されます。これは、シリアル化、デシリアル化、データベースマッピングなど、さまざまな場面で使用されます。