一、简介
(一) carbon
carbon 是一个简单、语义化、开发人员友好的 golang 时间包。carbon
提供了丰富的日期和时间处理功能,使得日期和时间操作更加简单和直观。
(二) gorm
gorm 是一个用于 Go 语言的 ORM(对象关系映射)框架。它提供了简洁的 API 来操作数据库,支持多种数据库(如 MySQL、PostgreSQL、SQLite 等),并且具有良好的性能和扩展性。
二、基本使用
(一) Carbon
和 time.Time
互转
// 将标准 time.Time 转换成 Carbon
carbon.CreateFromStdTime(time.Now())
// 将 Carbon 转换成标准 time.Time
carbon.Now().StdTime()
(二) 与 gorm
配合使用
1. time.Time
以往我们定义模型中时间日期字段类型为 time.Time
type User struct {
ID uint
Name string
Email string
CreatedAt time.Time
UpdatedAt time.Time
}
但是在一些场景下比如我们要把查询出来的数据 CreatedAt
和 UpdatedAt
转成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
我们只需要修改一下 CreatedAt
和 UpdatedAt
类型为 carbon.TimestampMilli
就可以了
type User struct {
ID uint
Name string
Email string
CreatedAt carbon.TimestampMilli
UpdatedAt 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(),
})
三、总结
carbon
和 gorm
是 Go 语言中非常有用的库,分别用于日期和时间操作以及数据库操作。通过结合这两个库,可以简化开发过程,提高代码的可读性和可维护性