エンコーディングとデコーディング
Go 標準ライブラリのシリアライゼーション:JSON と XML。
JSON
json.Marshal - シリアライゼーション
Go のデータ構造を JSON 文字列に変換:オブジェクト → <ruby>文字列<rt>もじれつ</rt></ruby>
json.Unmarshal - デシリアライゼーション
JSON 文字列を Go のデータ構造に変換:<ruby>文字列<rt>もじれつ</rt></ruby> → オブジェクト
Struct Tags
| Tag | 説明 |
|---|---|
json:"フィールド名" | カスタムフィールド名 |
json:",omitempty" | 空の値の処理(空文字列, 0, nil など) |
json:"-" | フィールドを除外 |
json:",string" | 型変換 |
json:"フィールド名,omitempty" | オプションの組み合わせ |
json:"フィールド名,string" | カスタム名と文字列変換 |
特殊な用途
| Tag | 説明 |
|---|---|
json:">属性" | フィールド名に特殊文字を許可 |
json:",raw" | 生の JSON メッセージを保持(json.RawMessage と併用) |
XML
Struct Tags
| Tag | 説明 |
|---|---|
xml:"名前" | XML 要素名を定義 |
xml:"名前,attr" | フィールドを要素ではなく XML 属性として定義 |
xml:"親要素>子要素" | XML のネスト構造関係を定義 |
xml:",innerxml" | 内容を生の XML として処理 |
xml:",any" | 任意の XML 要素を処理 |
xml:"-" | フィールドを無視、XML シリアライゼーションしない |
xml:",omitempty" | フィールドが空の場合省略 |
xml:",cdata" | 内容を CDATA セクションでラップ |
xml:"namespace 名前" | XML 名前空間を定義 |
xml:"namespace:要素" | 特定の名前空間の要素を使用 |