一、简介
(一) 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 uintName stringEmail stringCreatedAt time.TimeUpdatedAt 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 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(),
})
三、总结
carbon
和 gorm
是 Go 语言中非常有用的库,分别用于日期和时间操作以及数据库操作。通过结合这两个库,可以简化开发过程,提高代码的可读性和可维护性