欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 焦点 > go-carbon 和 gorm 优雅处理数据库日期时间

go-carbon 和 gorm 优雅处理数据库日期时间

2024/11/6 0:40:38 来源:https://blog.csdn.net/weixin_43064185/article/details/143525490  浏览:    关键词:go-carbon 和 gorm 优雅处理数据库日期时间

一、简介

(一) carbon

carbon 是一个简单、语义化、开发人员友好的 golang 时间包。carbon 提供了丰富的日期和时间处理功能,使得日期和时间操作更加简单和直观。

(二) gorm

gorm 是一个用于 Go 语言的 ORM(对象关系映射)框架。它提供了简洁的 API 来操作数据库,支持多种数据库(如 MySQL、PostgreSQL、SQLite 等),并且具有良好的性能和扩展性。

二、基本使用

(一) Carbontime.Time 互转
// 将标准 time.Time 转换成 Carbon
carbon.CreateFromStdTime(time.Now())
// 将 Carbon 转换成标准 time.Time
carbon.Now().StdTime()
(二) 与 gorm 配合使用
1. time.Time

以往我们定义模型中时间日期字段类型为 time.Time

type User struct {ID        uintName      stringEmail     stringCreatedAt time.TimeUpdatedAt time.Time
}

但是在一些场景下比如我们要把查询出来的数据 CreatedAtUpdatedAt 转成int64(时间戳) 给前端,这时候需要额外写代码将其转化。

users, err = query.User.WithContext(context.Background()).FindAll()
if err != nil {return nil, err
}var resp []Resp
for _, user := range users {resp = append(resp, Resp{ID:        user.ID,Name:      user.Name,Email:     user.Email,CreatedAt: user.CreateTime.UnixMilli(),UpdatedAt: user.CreateTime.UnixMilli(),})
}
return resp, nil
2. carbon.TimestampMilli

我们只需要修改一下 CreatedAtUpdatedAt类型为 carbon.TimestampMilli 就可以了

type User struct {ID        uintName      stringEmail     stringCreatedAt carbon.TimestampMilliUpdatedAt carbon.TimestampMilli
}

同样的需求只要gorm 查询 ,carbon 就会自己将我们的 time.Time 转成int64(时间戳)

users, err = query.User.WithContext(context.Background()).FindAll()
if err != nil {return nil, err
}// [{Key:1 Value:{"id":1,"name":"admin","email":"test@test.com", "created_at":1678734089000,"updated_at":1730681347000}}]
3. 创建日期对象
query.User.WithContext(context.Background()).Create(&model.User{Name:       "carbon",Email:      "carbon",CreateTime: carbon.Now().ToTimestampMilliStruct(),UpdateTime: carbon.Now().ToTimestampMilliStruct(),
})

三、总结

carbongorm 是 Go 语言中非常有用的库,分别用于日期和时间操作以及数据库操作。通过结合这两个库,可以简化开发过程,提高代码的可读性和可维护性

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com