Go
golang

struct にアノテーションつけてたら go vet . すべき

More than 3 years have passed since last update.

TL;DR

struct にアノテーションつけてたら go vet . すべき

go build, go install などは何もチェックしてくれない

下記のように間違ったフォーマットのアノテーションでも go build はなにも言ってくれないが

type WhiteList struct {

Id int `db:"pk" column:"id"`
UserId int `db:"unique" column:"user_id"`
Count int `default:0 column:"cnt"`
EndFlag bool `default:0 column:"end"`
AddedAt *time.Time `column:"added_at"`
}

go vet 様なら

(master)$go vet .

database.go:21: struct field tag `default:0` not compatible with reflect.StructTag.Get: bad syntax for struct tag value
database.go:22: struct field tag `default:0` not compatible with reflect.StructTag.Get: bad syntax for struct tag value

正しくはこうだった

type WhiteList struct {

Id int `db:"pk" column:"id"`
UserId int `db:"unique" column:"user_id"`
Count int `default:"0" column:"cnt"`
EndFlag bool `default:"0" column:"end`
AddedAt *time.Time `column:"added_at"`
}

go の struct アノテーションはフォーマットが間違ってると column:"cnt" とかの合ってる部分もまるまる読み込んでくれないうえに実行時エラーも(当然)なく動くので、この場合 column は Count, EndFlag でつくられちゃってた。