カテゴリ: Go言語 更新日: 2025/11/20

Go言語の構造体タグ(jsonタグなど)の使い方と活用例を初心者向けにやさしく解説

Go言語の構造体のタグ(jsonタグなど)を使った活用例
Go言語の構造体のタグ(jsonタグなど)を使った活用例

先生と生徒の会話形式で理解しよう

生徒

「Go言語で構造体に“タグ”って書くことがあると聞きました。jsonタグって何ですか?」

先生

「構造体タグとは、構造体のフィールドに補足情報を書いて、データを変換する手がかりにする仕組みです。特にjsonタグは、構造体とJSONのやり取りで使われますよ。」

生徒

「JSONってなんですか?難しそう…。」

先生

「JSONはデータのやり取りによく使われる“軽い文字列の箱”のようなフォーマットです。構造体タグを使うと、その箱にどうデータを入れるか決められますよ。」

1. 構造体タグとは?初心者向けの基本説明

1. 構造体タグとは?初心者向けの基本説明
1. 構造体タグとは?初心者向けの基本説明

構造体タグとは、構造体のフィールドに「このデータをどう扱うか」を伝えるためのメモのような役割を持つ仕組みです。バッククオート(`)で囲んで書くのが特徴で、特にjsonタグは、構造体とJSONを変換するときに使う「キー名(項目名)」を指定できます。難しそうに感じますが、タグがあることでデータの受け渡しがとてもスムーズになります。

たとえば、次のようにタグを書きます。


type Person struct {
    Name string `json:"name"`
}

この場合、「Nameというフィールドは、JSONに変換するときはnameというキー名を使ってください」という指定になります。タグがないと大文字のNameとして出力されるため、一般的なJSONと形式が合わず不便になることがあります。タグがあるだけで、他のサービスやAPIとも正しくデータをやり取りできるようになります。

生徒

「タグってただの文字なのに、どうして大事なんですか?」

先生

「たとえば、相手のプログラムが小文字のnameにしか対応していなかった場合、タグがないとデータを受け取れずエラーになります。でもタグで“jsonではnameとして扱うよ”と教えてあげると、機械同士でもちゃんと話が通じるんです。」

生徒

「なるほど…!人間の名前タグみたいに、プログラムにも分かりやすい名前をつけてあげるイメージなんですね。」

先生

「そうです。タグは“見えるラベル”のようなものなので、初心者でも気軽に使えますよ。」

2. jsonタグを使った構造体定義の基本例

2. jsonタグを使った構造体定義の基本例
2. jsonタグを使った構造体定義の基本例

type Person struct {
    Name string `json:"name"`
    Age  int    `json:"age"`
}

この例では、JSONに変えると{"name":"太郎","age":20}のようになります。タグを書かないと、Goのフィールド名そのまま(大文字)で出力されます。

3. json.Unmarshalとjson.Marshalの使い方

3. json.Unmarshalとjson.Marshalの使い方
3. json.Unmarshalとjson.Marshalの使い方

次に、JSONとGo構造体を行ったり来たりするコードを見てみましょう。


package main

import (
    "encoding/json"
    "fmt"
)

type Person struct {
    Name string `json:"name"`
    Age  int    `json:"age"`
}

func main() {
    // 構造体をJSONに変換
    p := Person{Name: "花子", Age: 30}
    b, _ := json.Marshal(p)
    fmt.Println(string(b))

    // JSONを構造体に戻す
    var p2 Person
    json.Unmarshal([]byte(`{"name":"次郎","age":25}`), &p2)
    fmt.Println("名前:", p2.Name, "年齢:", p2.Age)
}

実行結果:


{"name":"花子","age":30}
名前: 次郎 年齢: 25

タグがあるからJSONとの変換がスムーズにできますね。

4. omitempty や "-" を使った細かい制御

4. omitempty や
4. omitempty や "-" を使った細かい制御

タグにはオプションも書けます。omitemptyは値が“ゼロ値”(空文字や0など)のときにJSONに含めない設定です。json:"nickname,omitempty"のように使います。

"-"を書くと、完全に無視する意味です。JSONにもフィールドが出ません。

5. タグのオプション例:omitempty と "-" の実例

5. タグのオプション例:omitempty と
5. タグのオプション例:omitempty と "-" の実例

type Person2 struct {
    Name     string `json:"name"`
    Nickname string `json:"nickname,omitempty"`
    Secret   string `json:"-"`
}

Nicknameが空ならJSONに出ず、Secretは常にJSONに出ません。

6. 実利用例:APIで構造体タグを活用する

6. 実利用例:APIで構造体タグを活用する
6. 実利用例:APIで構造体タグを活用する

Web APIのレスポンスやリクエストで、JSON形式のデータを送るとき、構造体タグが大活躍します。タグでキー名を合わせておけば、データが正しくマッチします。

7. 構造体タグの注意点とおすすめ設定

7. 構造体タグの注意点とおすすめ設定
7. 構造体タグの注意点とおすすめ設定
  • 大文字・小文字の一致:Goでは構造体のフィールド名は大文字から始めないと外部パッケージから見えません。
  • タグの書き方:`json:"name,omitempty"`のように、タグはスペースで区切り可能です。
  • 他のタグも使える:DB操作系ではdb:"id"など、他の仕組みでも使えます。

8. タグでコードが見やすくなる理由

8. タグでコードが見やすくなる理由
8. タグでコードが見やすくなる理由

タグを使うと、構造体に「このフィールドはJSONでこう使ってね」という情報が明確に残るので、あとからコードを読む人にもわかりやすくなります。画像やテキストのラベルを貼るようなイメージです。

まとめ

まとめ
まとめ

これまでの内容を振り返ると、構造体タグはとても便利な道具だと感じられたはずです。とくにGo言語の学習を始めたばかりの人は、構造体のフィールドにバッククオートで指定するという表記が少し不思議に見えたかもしれません。だけれども、実際には難しい魔法のような仕組みではなく、ひとつのフィールドに対して「このデータはこう扱ってね」と教えるちいさなメモのような役割を持っています。

初心者がつまずきやすいのは、フィールド名とjsonのキー名が一致しない場合や、大文字小文字の扱いです。けれども、タグをつけておけば、プログラムの流れは驚くほど分かりやすく整えられます。

さらに、実際の開発ではWebAPIなどの外部データとやり取りする場面がたくさんあります。外の世界では、データはほとんどの場合にJSONやXMLのような分かりやすい形式に変換されます。そんなとき、構造体タグを正しく扱うことで、送りたいデータを誤解なく受け取ってもらえるし、受け取ったデータをきれいな形で自分の構造体に流し込めます。人と人が会話するときに、言葉の意味を整理して伝えるようなものです。

そしてもうひとつ大切なのは、タグのオプションを覚えることです。とくに「omitempty」と「-」は、初心者ほど早い段階で身につけておきたい考え方です。値が空のときには無理に出力せずに見た目をすっきりまとめたり、まったく公開したくない情報を隠したりできます。

無駄なデータが減り、通信量の節約につながり、データを扱う相手も迷わなくて済みます。

現場の開発では、構造体タグが設定されていないコードは読み手を不安にさせます。何が出てくるのか、どこが公開されるのか、どのキー名で外部とやり取りするのか分かりづらいからです。だけれども、タグがあるだけで、コードはすっきり整理され、チーム全体にとって読みやすい資料になります。見た目が整ったプログラムは、初心者の目にもやさしく映ります。

また、構造体タグはjson以外にも自由に使えます。データベース操作でつかう「db」タグ、画面表示を整えるためのカスタムタグなど、アイデア次第で使い道はたくさんあります。「Go言語はシンプルで読みやすい」という声が多い理由のひとつが、このタグの存在です。複雑な命令を増やすのではなく、フィールドにそっと情報を添えるという穏やかなアプローチは、プログラム全体の読み心地をやわらかくしてくれます。

タグを書き間違えると正しく動きませんし、バッククオートの付け忘れは気づきにくい落とし穴です。

それでも、慣れてしまえばタグは頼もしい味方になります。最初は小さな構造体からはじめ、次にAPIの受け渡しで使ってみて、最後に大きなプロジェクトでも自然に使えるようになると、Go言語の世界が一気に広がります。

JSONが苦手だと感じていた人でも、構造体タグを理解することで「なるほど、こうやって形が揃うんだ」と、すっきり納得できる場面が増えます。さらに、テストやバグ調査のときも、タグがあると原因を追いやすくなります。構造体タグを怖がらずに触ってみることで、プログラミングの世界が少しずつ心地よくなっていくでしょう。

サンプルプログラムで振り返ろう


package main

import (
    "encoding/json"
    "fmt"
)

type Product struct {
    Title  string `json:"title"`
    Price  int    `json:"price"`
    Secret string `json:"-"`
}

func main() {
    p := Product{Title: "りんご", Price: 120, Secret: "ひみつのなまえ"}
    b, _ := json.Marshal(p)
    fmt.Println(string(b))
}

この例では、Secretは出力されません。見せなくてよい値を隠すことで、余計な情報を外に出さずにすみます。たくさんの商品を扱うサービスでも役立ちますし、プライバシーを守る仕組みにもつながります。

先生と生徒の振り返り会話

生徒

「jsonタグは少し難しいと思っていたけれど、名前を変えるだけじゃなくて、不要なデータを消すこともできるんですね。」

先生

「そうなんです。構造体はただの箱じゃなくて、タグをつけることで好きな形に整えることができるんです。データが多いときほど、タグの効果は大きくなりますよ。」

生徒

「バッククオートを忘れないように気をつけます。最初は違和感がありましたが、少しずつ慣れてきました。」

先生

「慣れると簡単に使いこなせます。APIの開発やファイルの保存などにも応用できるので、少しずつ触ってみてください。」

カテゴリの一覧へ
新着記事
Go言語の構造体でインターフェースを実装する方法を初心者向けにやさしく解説!
Kotlinの演算子一覧と使い方!算術・比較・論理演算子の基本を解説
Go言語の文字列フォーマット!fmt.Sprintfで簡単に出力を整形する方法
Go言語のエラーと例外の違いを初心者向けに整理!わかりやすく解説
人気記事
No.1
Kotlin・Go・Swift記事の人気No1
Swiftのwhile文とrepeat while文を完全マスター!初心者にもわかる繰り返し処理の使い方と違い
No.2
Kotlin・Go・Swift記事の人気No2
Android Studioのインストール手順と初期設定を初心者向けに完全解説!
No.3
Kotlin・Go・Swift記事の人気No3
Swift入門ガイド|基本構文と書き方をマスターしよう
No.4
Kotlin・Go・Swift記事の人気No4
Kotlinの正規表現(Regex)の使い方をやさしく解説!文字列操作の基本を初心者向けに学ぼう
No.5
Kotlin・Go・Swift記事の人気No5
Kotlinのwhen式を完全ガイド!初心者でもわかるパターンマッチング的な使い方
No.6
Kotlin・Go・Swift記事の人気No6
Kotlinで画面を作る!レイアウトXMLとビューの基本操作をやさしく解説
No.7
Kotlin・Go・Swift記事の人気No7
Kotlinのコンパニオンオブジェクトとは?初心者向けに使い方と役割をわかりやすく解説!
No.8
Kotlin・Go・Swift記事の人気No8
Swiftのオプショナル型とは?初心者でもわかる使い方とアンラップの基礎