Modelとなる構造体に対して、dbのテーブルとのマッピングやjsonのkey名を指定したいときに、tagを利用する方法がある。
たとえば、Id・Description・CreatedAt というフィールド名を持つTodoという構造体と、それぞれがsnake caseとなっているDBテーブルのフィールドの紐付けは、構造体宣言時にこういうタグをつければいい。
models/todo.go
package models
import "time"
type Todo struct {
Id int `db:"id"`
Description string `db:"description"`
CreatedAt time.Time `db:"created_at"`
}
※ gorpの場合、テーブル名と構造体の紐付けは別の場所で行う
ここで、「このモデルそのままViewに投げてJSONで出力したいな〜」となったとき、
Todo構造体のフィールド名がそのままKey名になるため、以下のようなJSONになってしまう。
{ "Id":1, "Description":"代々木公園から蚊を駆逐する", "CreatedAt":"2014-09-10T14:02:22Z"}
ここで気になるのが、「タグを複数つけることはできないのか」ということだが、問題なくできた。
バッククォート中にスペースで区切ることで、タグを複数付加することができる。
models/todo.go
package models
import "time"
type Todo struct {
Id int `db:"id" json:"id"`
Description string `db:"description" json:"description"`
CreatedAt time.Time `db:"created_at" json:"created_at"`
}
JSON表示するとこのとおり。
{ "id":1, "description":"代々木公園から蚊を駆逐する", "created_at":"2014-09-10T14:02:22Z"}
注意事項
上記記事は Martini Webフレームワークおよびそのrenderプラグイン、そしてORマッパーにgorpを使用することを想定して作成した。