ZBLOG

gorm中将mysql的string类型的数据转化为time类型的数据

在 gorm 中,我们可以使用结构体中的 time.Time 类型来表示时间类型的数据。如果数据库表中存储时间的字段是 string 类型,则需要进行类型转换。

gorm 提供了一个 Callback() 方法,该方法可以注册一个回调函数,在对应操作时会被调用。我们可以在回调函数中进行数据类型转换操作。

具体实现步骤如下:

  1. 在模型结构体中定义两个字段:原始字符串类型的时间字段和 time.Time 类型的时间字段;
  2. 使用 Callback() 方法注册一个回调函数,该回调函数会在查询操作时被调用;
  3. 在回调函数中对原始字符串类型的时间字段进行解析,并将解析后得到的 time.Time 类型的值赋给目标时间字段。

以下是示例代码:

  1. import (
  2. "time"
  3. "github.com/jinzhu/gorm"
  4. )
  5. type User struct {
  6. ID uint
  7. Name string
  8. // 原始字符串类型的时间字段
  9. RawCreatedAt string `gorm:"column:created_at"`
  10. // 转换后的 time.Time 类型时间字段
  11. CreatedAt time.Time `gorm:"-"`
  12. }
  13. // 定义回调函数,将 RawCreatedAt 字段转为 CreatedAt 字段
  14. func (u *User) AfterFind(tx *gorm.DB) error {
  15. t, err := time.Parse("2006-01-02 15:04:05", u.RawCreatedAt)
  16. if err != nil {
  17. return err
  18. }
  19. u.CreatedAt = t
  20. return nil
  21. }
  22. // 设置表名和主键名等信息
  23. func (u *User) TableName() string {
  24. return "users"
  25. }
  26. func main() {
  27. db, err := gorm.Open("mysql", "user:password@/dbname?charset=utf8mb4&parseTime=True&loc=Local")
  28. if err != nil {
  29. panic(err)
  30. }
  31. defer db.Close()
  32. var user User
  33. db.Where("id = ?", 1).First(&user)
  34. fmt.Println(user.CreatedAt)
  35. }

在上述代码中,我们定义了一个名为 User 的模型结构体,其中包含原始字符串类型的时间字段 `

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=3568

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?