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

  • 13
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

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 でつくられちゃってた。