Slide 53
Slide 53 text
タグ機能の拡張:コード例
type User struct {
ID int64 `json:"id,string"` // 数値を"123"で入出力
Name string `json:"name"`
UserID int `json:"userID,case:ignore"` // user_id なども受け入れ
Count int `json:"count,omitzero"` // ゼロ値なら省略
Tags []string `json:"tags,omitempty"` // JSONで空なら省略
CreatedAt time.Time `json:"createdAt,format:RFC3339"`
Extra map[string]any `json:",inline"` // 追加キーを親直下へ展開
}
// Unmarshal: case:ignore で "user_id" → UserID に入る
var u User
_ = json.Unmarshal([]byte(`{"id":"123","user_id":7,"name":"A","x":1}`), &u)
// Marshal: omitzero/omitempty/format/inline の挙動を確認
out, _ := json.Marshal(User{
ID: 123,
Name: "A",
CreatedAt: time.Date(2025, 9, 27, 15, 4, 5, 0, time.UTC),
Extra: map[string]any{"x": 1},
})
fmt.Println(u.UserID) // => 7
fmt.Println(string(out)) // => {"id":"123","name":"A","createdAt":"2025-09-27T15:04:05Z","x":1}