数据库由
db.AutoMigrate(&models.User{})
创建
用户在包中:模型
type User struct {
Username string `json:"username" gorm:"primaryKey; not null; unique"`
Passwordhash string `json:"passwordhash" gorm:"not null"`
Pincode int `json:"pincode" gorm:"not null"`
CreatedAt time.Time `json:"created_at" gorm:"type:DATETIME"`
UpdatedAt time.Time `json:"updated_at" gorm:"type:DATETIME"`
DeletedAt gorm.DeletedAt `json:"deleted_at" gorm:"index,type:DATETIME"`
}
db := config.InitializeDB()
var dataFromDB models.User //Read DB data from here
errr := db.Where("username = ?", userData.Username).Limit(1).Find(&dataFromDB).Error
log.Println("CreatedAt: ", dataFromDB.CreatedAt)
log.Println("CreatedAt: ", dataFromDB.UpdatedAt)
if errr != nil {
log.Println("Error fetching data:", errr)
return
}
这是我收到的完整错误
2024/08/30 10:56:30 Server starting at 9090
2024/08/30 10:57:00 /app/controllers/auth_controller.go:30 sql: Scan error on column index 1, name "created_at": unsupported Scan, storing driver.Value type []uint8 into type *time.Time
[10.014ms] [rows:1] SELECT * FROM `users` WHERE username = 'smitesh97' AND `users`.`deleted_at` IS NULL LIMIT 1
2024/08/30 10:57:00 CreatedAt: 0001-01-01 00:00:00 +0000 UTC
2024/08/30 10:57:00 CreatedAt: 0001-01-01 00:00:00 +0000 UTC
2024/08/30 10:57:00 Error fetching data: sql: Scan error on column index 1, name "created_at": unsupported Scan, storing driver.Value type []uint8 into type *time.Time
这是我试图作为小组项目的一部分创建的身份验证后端的一部分。主项目将使用它。尽管当我在本地设置中使用此配置时它可以工作。而在容器上运行它则不然。 如果我将 CreatedAt 或 UpdatedAt 的类型更改为 interface{} 类型。它工作得很好,但我不认为这是推荐的。 这是一个错误吗?
在 DSN 中添加
parseTime=True
似乎已经解决了问题。
dsn := fmt.Sprintf("%s:%s@tcp(host.docker.internal:3306)/lostandfound***?charset=utf8&parseTime=True&loc=Local***", username, password)
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
if err != nil {
panic(err)
}