go-carbon v2.3.0 圣诞节特别版发布,这应该是 2023 年的最后一个版本,祝大家圣诞节快乐!
carbon 是一个轻量级、语义化、对开发者友好的 golang 时间处理库,支持链式调用。
目前已被 [awesome-go]( https://github.com/avelino/awesome-go#date-and-time "awesome-go") 收录,如果您觉得不错,请给个 star 吧
[github.com/golang-module/carbon]( https://github.com/golang-module/carbon "github.com/golang-module/carbon")
[gitee.com/golang-module/carbon]( https://gitee.com/golang-module/carbon "gitee.com/golang-module/carbon")
#### 安装使用
##### Golang 版本大于等于 1.16
```go
// 使用 github 库
go get -u github.com/golang-module/carbon/v2
import "github.com/golang-module/carbon/v2"
// 使用 gitee 库
go get -u gitee.com/golang-module/carbon/v2
import "gitee.com/golang-module/carbon/v2"
```
##### Golang 版本小于 1.16
```go
// 使用 github 库
go get -u github.com/golang-module/carbon
import "github.com/golang-module/carbon"
// 使用 gitee 库
go get -u gitee.com/golang-module/carbon
import "gitee.com/golang-module/carbon"
```
##### JSON
###### 定义模型
```go
type Person struct {
Name string `json:"name"`
Age int `json:"age"`
Birthday carbon.Carbon `json:"birthday" carbon:"layout:2006-01-02"`
GraduatedAt carbon.Carbon `json:"graduated_at" carbon:"layout:15:04:05"`
CreatedAt carbon.Carbon `json:"created_at" carbon:"layout:2006-01-02 15:04:05"`
}
```
或
```go
type Person struct {
Name string `json:"name"`
Age int `json:"age"`
Birthday carbon.Carbon `json:"birthday" carbon:"format:Y-m-d"`
GraduatedAt carbon.Carbon `json:"graduated_at" carbon:"format:H:i:s"`
CreatedAt carbon.Carbon `json:"created_at" carbon:"format:Y-m-d H:i:s"`
}
```
###### 实例化模型
```go
now := Parse("2020-08-05 13:14:15", PRC)
person := Person {
Name: "gouguoyin",
Age: 18,
Birthday: now,
GraduatedAt: now,
CreatedAt: now,
}
```
###### JSON 编码
```go
err1 := carbon.LoadTag(&person)
if err1 != nil {
// 错误处理
log.Fatal(err1)
}
data, err2 := json.Marshal(person)
if err2 != nil {
// 错误处理
log.Fatal(err2)
}
fmt.Printf("%s", data)
// 输出
{
"name": "gouguoyin",
"age": 18,
"birthday": "2020-08-05",
"graduated_at": "13:14:15",
"created_at": "2020-08-05 13:14:15"
}
```
###### JSON 解码
```go
str := `{
"name": "gouguoyin",
"age": 18,
"birthday": "2020-08-05",
"graduated_at": "13:14:15",
"created_at": "2020-08-05 13:14:15"
}`
var person Person
err1 := carbon.LoadTag(&person)
if err1 != nil {
// 错误处理
log.Fatal(err1)
}
err2 := json.Unmarshal([]byte(str), &person)
if err2 != nil {
// 错误处理
log.Fatal(err2)
}
fmt.Sprintf("%s", person.Birthday) // 2002-08-05
fmt.Sprintf("%s", person.GraduatedAt) // 13:14:15
fmt.Sprintf("%s", person.CreatedAt) // 2002-08-05 13:14:15
```
##### 更新日志
- 正式移除弃用的 `FromStdTime`, `Time2Carbon`, `Carbon2Time` 方法
- 将 `ToANSICString` 方法更名为 `ToAnsicString`
- 将 `CreateFromDateTime` 方法中的毫秒设置为 0
- 将 `CreateFromDate` 方法中的时分秒设置为 0
- 修复 `DiffInMonths` 方法错误
- 将 `GormDataType` 方法从 `json.go` 文件移动到 `database.go` 文件
- 新增 LoadTag 方法,利用反射通过设置 `tag` 进行 `json` 自定义编码和解码
- `String` 方法根据设置的不同` tag` 输出不同格式字符串
有疑问加站长微信联系(非本文作者)