自分は Go の ORM として主に GORM を使っているが、このように構造体にタグをつけている。
この例は自分が GitHub で公開しているコードから持ってきたものでわかりづらいが、内容は無視して見て欲しい。
type Response struct {
gorm.Model `json:"-"`
Owner string `json:"owner"`
Token string `json:"token"`
Columns []Column `json:"columns"`
Days []Day `json:"days"`
}
こういう風に json というタグをつけておくと、構造体を json にシリアライズした時に自動でそのカラム名が適用されるので便利。
ちなみに、gorm.Model に json:"-"
をつけているが、こうすると GORM が自動でつけてくれる CreatedAt とか ID みたいなパラメータは、jsonにシリアライズされた時に隠される。この構造体をそのままサービスのレスポンスとして返したいので、余計な要素を削れる。
ここで自分がハマったのは、タグを複数指定するときにはどうすればいいだろうということ。
GORM の機能として unique 制約をつけたい場合、構造体のパラメータに gorm: "unique"
というタグをつける必要があるが、それを json のタグと共存させたい。
これは、複数のタグを付ける場合は、単純にスペースで区切って書けばよい。
type Response struct {
gorm.Model `json:"-"`
Owner string `json:"owner" gorm:"unique"`
Token string `json:"token"`
Columns []Column `json:"columns"`
Days []Day `json:"days"`
}
こんな感じ。カンマで区切るのでも、バッククォートをもう1つ書くわけでもないので注意。
ちょっと検索性が悪く調べるのに時間がかかったのでメモ。