User.birthday や Diary.ymd みたいな date 型を指定したい場合は struct を以下のようにすれば良いらしい。 Update するときは Query に hms つけた状態でも ymd だけ更新されます。 Find するときは ymd 形式に変えてあげればいいと思います。
package main import ( "fmt" "time" "github.com/jinzhu/gorm" _ "github.com/jinzhu/gorm/dialects/mysql" ) type Diary struct { ID int Title string Ymd time.Time `sql:"not null;type:date"` } func main() { db, err := gorm.Open("mysql", "root:@/go_tutorial?charset=utf8&parseTime=True&loc=Local") if err != nil { panic("failed to connect database") } db.LogMode(true) db.AutoMigrate(&Diary{}) db.Delete(&Diary{}) ymd := time.Date(2014, time.December, 31, 0, 0, 0, 0, time.UTC) db.Create(&Diary{Title: "titile", Ymd: ymd}) var diary Diary err = db.Where("ymd = ?", ymd.Format("2006-01-02")).First(&diary).Error if err != nil { panic(err) } newYmd := time.Date(2015, time.December, 31, 0, 0, 0, 0, time.UTC) diary.Ymd = newYmd db.Save(diary) err = db.Where("ymd = ?", newYmd.Format("2006-01-02")).First(&diary).Error if err != nil { panic(err) } fmt.Println(diary) }
実行結果
[2016-11-16 16:37:13] [0.36ms] DELETE FROM `diaries` [2016-11-16 16:37:13] [0.44ms] INSERT INTO `diaries` (`title`,`ymd`) VALUES ('titile','2014-12-31T00:00:00Z') [2016-11-16 16:37:13] [0.50ms] SELECT * FROM `diaries` WHERE (ymd = '2014-12-31') ORDER BY `diaries`.`id` ASC LIMIT 1 [2016-11-16 16:37:13] [0.66ms] UPDATE `diaries` SET `title` = 'titile', `ymd` = '2015-12-31T00:00:00Z' WHERE `diaries`.`id` = '13' [2016-11-16 16:37:13] [0.59ms] SELECT * FROM `diaries` WHERE `diaries`.`id` = '13' AND ((ymd = '2015-12-31')) ORDER BY `diaries`.`id` ASC LIMIT 1 {13 titile 2015-12-31 00:00:00 +0900 JST}