Go JSON: Struct Tags と Marshal の実践ポイント
2025-01-30
Go では JSON を struct と tag でマッピングします。タグの設計ミスや omitempty の理解不足が API 不整合の原因になりがちです。
Struct tags
json:"name,omitempty" でキー名と省略挙動を定義し、非公開フィールドは対象外です。
type User struct {
ID int `json:"id"`
Name string `json:"name,omitempty"`
}Unmarshal
interface{} の数値は float64 になるため、厳密化には json.Number や構造体を使います。
json.RawMessage
内側 JSON を後段で解析したいときに有効で、ポリモーフィック payload に向きます。
Marshal
反射ベース実装のため hot path では最適化検討が必要ですが、多くは標準実装で十分です。