カテゴリ: Go言語 更新日: 2026/08/26

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タグを使った構造体定義の基本例

まずは最小の例から確認しましょう。jsonタグは「JSONにするときのキー名」を明示するラベルです。タグを付けると、一般的な小文字のキーで出力でき、他のサービスやフロントエンドと噛み合いやすくなります。


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

上の定義を使ってJSONに変換すると、次のイメージになります。


{"name":"太郎","age":20}

もしタグを書かずに次のように定義した場合は、Goのフィールド名そのまま(先頭が大文字)のキーで出力されます。一般的なAPIの慣習(小文字スネークや小文字キャメル)とズレることがあるため、タグで合わせるのが無難です。


type PersonNoTag struct {
    Name string
    Age  int
}

この場合の出力イメージは次のとおりです。


{"Name":"太郎","Age":20}

ポイント(初心者向けの覚え方)

  • json:"name"の「name」は、JSON側の見出し(キー名)。
  • Goのフィールド名(Name)と、JSONのキー名(name)をタグで橋渡しするイメージ。
  • チーム開発や外部API連携では、期待されるキー名に合わせることが重要。迷ったらまずタグで明示。

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

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

ここでは「Goの構造体 ⇄ JSON文字列」の基本的な往復だけに絞って、最短のサンプルで流れをつかみます。json.Marshalは構造体からJSONを作る関数、json.UnmarshalはJSONから構造体へ入れ直す関数です。どちらも結果はバイト列とエラーで返ってくるので、はじめはエラーを画面に出して確認できる形で書いておくと安心です。タグ(例:json:"name")は、JSON側のキー名を合わせる「橋渡し」の役目をします。


package main

import (
    "encoding/json"
    "fmt"
)

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

func main() {
    // 1) 構造体 → JSON(json.Marshal)
    p := Person{Name: "花子", Age: 30}
    b, err := json.Marshal(p)
    if err != nil {
        fmt.Println("変換エラー:", err)
        return
    }
    fmt.Println(string(b)) // {"name":"花子","age":30}

    // 2) JSON → 構造体(json.Unmarshal)
    var p2 Person
    src := []byte(`{"name":"次郎","age":25}`)
    if err := json.Unmarshal(src, &p2); err != nil {
        fmt.Println("読み取りエラー:", err)
        return
    }
    fmt.Println("名前:", p2.Name, "年齢:", p2.Age)
}

実行イメージ:


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

初心者向けの確認ポイント

  • Marshalは「Go → JSON」。文字として見たいときはstring(バイト列)に変換。
  • Unmarshalは「JSON → Go」。&変数を渡すのを忘れないこと(中身を書き込むため)。
  • 構造体のフィールドは先頭を大文字に(外部パッケージから見える=JSONに出せる)。
  • タグのキー名(例:name)は、相手のAPIやフロントエンドと揃えるとトラブルが減ります。

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

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

タグには動きを調整するオプションを足せます。omitemptyは、そのフィールドが“ゼロ値”(空文字、0、false、nil など)のときに、JSONへ出力しない設定です。もう一つの"-"は「常に無視して出力しない」を意味します。不要な空項目を減らしたい、内部用の値を外へ出したくない、といったときに役立ちます。


type Profile struct {
    Name     string `json:"name"`
    Nickname string `json:"nickname,omitempty"` // 空なら出力しない
    Age      int    `json:"age,omitempty"`      // 0なら出力しない
    Secret   string `json:"-"`                  // 常に出力しない
}

たとえば、次の値をJSONにするとどうなるかを比べてみましょう。

例1:すべてに値がある場合


入力値: Name="太郎", Nickname="たろ", Age=20, Secret="token"
出力:   {"name":"太郎","nickname":"たろ","age":20}

例2:ニックネームが空、年齢が0の場合


入力値: Name="太郎", Nickname="", Age=0, Secret="token"
出力:   {"name":"太郎"}

ポイントは「ゼロ値かどうか」を基準に含めるかを自動で切り替えられることです。空の項目が並ぶJSONは読み手にも機械にも扱いづらくなりがちです。omitemptyで必要な情報だけを出すようにしておくと、API連携やログの見通しが良くなります。内部用の値は"-"で確実に隠す、と覚えておくと安全です。

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

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

omitemptyは「値がゼロ値(空文字、0、false、nil など)のときはJSONへ出さない」ためのスイッチ、"-"は「常に無視して出力しない」ためのスイッチです。不要な空項目を減らしたり、外へ見せたくない内部情報を確実に隠したいときに使います。次のように最小構成で覚えるのがおすすめです。


type Person2 struct {
    Name     string `json:"name"`
    Nickname string `json:"nickname,omitempty"` // 空なら出さない
    Secret   string `json:"-"`                  // 常に出さない
}

出力イメージ(初心者向けの見比べ)


入力: Name="太郎", Nickname="たろ", Secret="token"
出力: {"name":"太郎","nickname":"たろ"}

入力: Name="太郎", Nickname="", Secret="token"
出力: {"name":"太郎"}

ポイントは、表示したくない値は"-"で完全に除外し、あれば出す/なければ出さないという可変の項目はomitemptyで整えることです。これだけでJSONがすっきりし、読み手にも機械にも優しいデータになります。まずは「公開したい最低限の項目だけをタグで明示する」という使い方から始めると、実務のAPI連携でも迷いにくくなります。

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言語を基礎からスッキリ学びたい人や、 文法だけでなく「実用的な使い方」まで押さえたい人には、 定番の入門書がこちらです。

基礎からわかるGo言語をAmazonで見る

※ Amazon広告リンク

この記事を読んだ人からの質問

この記事を読んだ人からの質問
この記事を読んだ人からの質問

プログラミング初心者からのよくある疑問/質問を解決します

Go言語の構造体タグとは何ですか?JSONタグとの違いはありますか?

Go言語の構造体タグとは、構造体のフィールドに追加情報を付けるための仕組みです。タグを書くことで、フィールドをJSON形式に変換するときのキー名を指定したり、外部システムとのデータ交換を正しく行うための設定を追加できます。特にJSONタグは、JSON形式への変換やJSONからの読み取りの際に、フィールド名とJSONキー名を合わせるために使われます。プログラミング初心者でも、構造体タグを使うとデータのやり取りがスムーズになり、Web APIや外部サービスとの通信でとても役に立ちます。

バッククオート記号で囲むと説明されていますが、なぜGo言語では構造体タグにバッククオートを使うのですか?

Go言語では、構造体タグをバッククオートで囲んで記述します。バッククオートを使う理由は、タグ全体を文字列として扱うためです。ダブルクオートではなくバッククオートを使うことで、タグの中にスペースやコロンを含めても問題なく扱える仕組みになっています。JSONタグだけでなく、DBタグやXMLタグなど複数のタグを同時に書きたい場合でも、バッククオートで囲むことで整った形のタグを記述できるため、プログラミングに慣れていない初心者でも安心して使うことができます。

JSONに変換したときに、構造体のフィールド名とJSONのキー名が違うのはなぜですか?

Go言語の構造体のフィールド名は大文字で始まる必要がありますが、JSONのキー名は小文字で書かれることが多いです。そのため、構造体そのままだと「Name」や「Age」といった大文字のままJSONに出力されます。そこで、JSONタグを付けることで「name」「age」のように小文字で出力でき、外部サービスとの連携やAPIの通信がスムーズになります。初心者はこの大小の違いで戸惑いやすいですが、JSONタグを正しく使えば統一感のあるデータ形式を実現できます。
関連セミナーのご案内

【超入門】ゼロから始めるGo言語プログラミング:最速で「動くアプリ」を作るマンツーマン指導

「プログラミングの仕組み」が根本からわかる。Go言語でバックエンド開発の第一歩を。

本講座を受講することで、単なる文法の暗記ではなく、「プログラムがコンピュータの中でどう動いているか」という本質的な理解につながります。シンプルながら強力なGo言語(Golang)を通じて、現代のバックエンドエンジニアに求められる基礎体力を最短距離で身につけます。

具体的な開発内容と環境

【つくるもの】
ターミナル(黒い画面)上で動作する「対話型計算プログラム」や、データを整理して表示する「ミニ・ツール」をゼロから作成します。自分の書いたコードが形になる感動を体験してください。

【開発環境】
プロの現場でシェアNo.1のVisual Studio Code (VS Code)を使用します。インストールから日本語化、Go言語用の拡張機能設定まで、現場基準の環境を一緒に構築します。

この60分で得られる3つの理解

1. 環境構築の完全な理解

「なぜ動くのか」という設定の仕組みを理解し、今後の独学で詰まらない土台を作ります。

2. Go言語の基本構造(変数・型)

データの種類やメモリの概念など、他言語にも通じるプログラミングの本質を学びます。

3. 読みやすいコードの書き方

ただ動くだけでなく、誰が見ても分かりやすい「綺麗なコード」を書くための考え方を伝授します。

※本講座は、将来的にバックエンドエンジニアやクラウドインフラに興味がある未経験者のためのエントリー講座です。マンツーマン形式により、あなたの理解度に合わせて進行します。

セミナー画像

初めてのGo言語を一緒に学びましょう!

カテゴリの一覧へ
新着記事
New1
Kotlin
Kotlinのrunの使い方!スコープ内で処理をまとめるテクニック
New2
Kotlin
Kotlinの文字列を逆順にするreversedの使い方を徹底解説!初心者でもわかる文字列操作入門
New3
Kotlin
KotlinのtoList・toCharArrayの使い方を徹底解説!文字列をリストに変換する方法を初心者向けにやさしく説明
New4
Kotlin
Kotlinの拡張プロパティとは?基本的な作り方と活用例を初心者向けに解説
人気記事
No.1
Java&Spring記事人気No1
C#
C#プログラムの基本的な書き方を完全解説!初心者でもわかる文法入門ガイド
No.2
Java&Spring記事人気No2
Swift
Swift Playgroundの使い方を完全解説!初心者に最適な学習環境の始め方
No.3
Java&Spring記事人気No3
Swift
Swift入門ガイド|基本構文と書き方をマスターしよう
No.4
Java&Spring記事人気No4
Kotlin
Android Studioのインストール手順と初期設定を初心者向けに完全解説!
No.5
Java&Spring記事人気No5
C#
C#の論理演算子の使い方を完全ガイド!&&・||・!を初心者でもわかりやすく解説
No.6
Java&Spring記事人気No6
Kotlin
Kotlinのインストール方法まとめ!Windows・Mac・Linux別にステップ解説
No.7
Java&Spring記事人気No7
Kotlin
KotlinでZIPファイルの圧縮と解凍を実装する手順を完全解説!Kotlinファイル操作と入出力I/O入門
No.8
Java&Spring記事人気No8
Swift
Swiftでユーザー向けエラーメッセージ設計を徹底解説!iOSアプリのUI/UXで注意すべきポイント

💻 作業効率アップに

ノートPCを縦置きしてデスクを広く。
省スペースで片づく定番スタンド

UGREEN 縦型スタンドをAmazonで見る

※ Amazon広告リンク