はじめに
Goのテストを書いていた時にメールアドレスが一致したらエラーを返すテストを書いていました
なのになぜか200の成功ステータスが返ってくるので調べたところレコードが作成されていました
Gormで設定したユニークが効いていないようです
問題
以下のようなコードでテーブル定義を書いていました
user.go
Email string `gorm:"size:256 , not null , unique" json:"email"`
しかしこれではnon nul
やunique
の制限がついていませんでした
MySQLでdesc users;
を確認してもやはり制約はついていません
解決方法
以下のように変更することで解決しました
user.go
Email string `gorm:"size:256;not null;unique" json:"email"`
なんとなくで書いていたようです
テストを書くまで気づきませんでした
おわりに
公式ドキュメントをしっかりみるようにすれば解決することがほとんどです
参考