go-carbon v2.3.1 发布,轻量级、语义化、对开发者友好的 Golang 时间处理库

325 天前
 gouguoyin

carbon 是一个轻量级、语义化、对开发者友好的 golang 时间处理库,支持链式调用。

目前已被 awesome-go 收录,如果您觉得不错,请给个 star 吧

github.com/golang-module/carbon

gitee.com/golang-module/carbon

安装使用

Golang 版本大于等于 1.16
// 使用 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
// 使用 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"
定义模型
type Person struct {
    Name string `json:"name"`
    Age  int    `json:"age"`
    
    Birthday0 Carbon `json:"birthday0"`
    Birthday1 Carbon `json:"birthday1" carbon:"date"`
    Birthday2 Carbon `json:"birthday2" carbon:"time"`
    Birthday3 Carbon `json:"birthday3" carbon:"dateTime"`
    Birthday4 Carbon `json:"birthday4" carbon:"date" tz:"PRC"`
    Birthday5 Carbon `json:"birthday5" carbon:"time" tz:"PRC"`
    Birthday6 Carbon `json:"birthday6" carbon:"dateTime" tz:"PRC"`
}

type Person struct {
    Name string `json:"name"`
    Age  int    `json:"age"`
    
    Birthday0 Carbon `json:"birthday0"`
    Birthday1 Carbon `json:"birthday1" carbon:"layout:2006-01-02"`
    Birthday2 Carbon `json:"birthday2" carbon:"layout:15:04:05"`
    Birthday3 Carbon `json:"birthday3" carbon:"layout:2006-01-02 15:04:05"`
    Birthday4 Carbon `json:"birthday4" carbon:"layout:2006-01-02" tz:"PRC"`
    Birthday5 Carbon `json:"birthday5" carbon:"layout:15:04:05" tz:"PRC"`
    Birthday6 Carbon `json:"birthday6" carbon:"layout:2006-01-02 15:04:05" tz:"PRC"`
}

type Person struct {
    Name string `json:"name"`
    Age  int    `json:"age"`
    
    Birthday0 Carbon `json:"birthday0"`
    Birthday1 Carbon `json:"birthday1" carbon:"format:Y-m-d"`
    Birthday2 Carbon `json:"birthday2" carbon:"format:H:i:s"`
    Birthday3 Carbon `json:"birthday3" carbon:"format:Y-m-d H:i:s"`
    Birthday4 Carbon `json:"birthday4" carbon:"format:Y-m-d" tz:"PRC"`
    Birthday5 Carbon `json:"birthday5" carbon:"format:H:i:s" tz:"PRC"`
    Birthday6 Carbon `json:"birthday6" carbon:"format:Y-m-d H:i:s" tz:"PRC"`
}

如果 carbon 标签没有设置,默认是 layout:2006-01-02 15:04:05;如果 tz 标签没有设置,默认是 Local

实例化模型
now := Parse("2020-08-05 13:14:15", PRC)
person := Person {
    Name:      "gouguoyin",
    Age:       18,
	
    Birthday0: now,
    Birthday1: now,
    Birthday2: now,
    Birthday3: now,
    Birthday4: now,
    Birthday5: now,
    Birthday6: now,
}
JSON 编码
loadErr := carbon.LoadTag(&person)
if loadErr != nil {
    // 错误处理
    log.Fatal(loadErr)
}
data, marshalErr := json.Marshal(person)
if marshalErr != nil {
    // 错误处理
    log.Fatal(marshalErr)
}
fmt.Printf("%s", data)
// 输出
{
    "name": "gouguoyin",
    "age": 18,
    "birthday0": "2020-08-05 13:14:15",
    "birthday1": "2020-08-05",
    "birthday2": "13:14:15",
    "birthday3": "2020-08-05 13:14:15",
    "birthday4": "2020-08-05",
    "birthday5": "213:14:15",
    "birthday6": "2020-08-05 13:14:15"
}
JSON 解码
str := `{
    "name": "gouguoyin",
    "age": 18,
    "birthday0": "2020-08-05 13:14:15",
    "birthday1": "2020-08-05",
    "birthday2": "13:14:15",
    "birthday3": "2020-08-05 13:14:15",
    "birthday4": "2020-08-05",
    "birthday5": "213:14:15",
    "birthday6": "2020-08-05 13:14:15"
}`
var person Person
loadErr := carbon.LoadTag(&person)
if loadErr != nil {
    // 错误处理
    log.Fatal(loadErr)
}

unmarshalErr := json.Unmarshal([]byte(str), &person)
if unmarshalErr != nil {
    // 错误处理
    log.Fatal(unmarshalErr)
}

fmt.Sprintf("%s", person.Birthday0) // 2002-08-05 13:14:15
fmt.Sprintf("%s", person.Birthday1) // 2020-08-05
fmt.Sprintf("%s", person.Birthday2) // 13:14:15
fmt.Sprintf("%s", person.Birthday3) // 2002-08-05 13:14:15
fmt.Sprintf("%s", person.Birthday4) // 2002-08-05
fmt.Sprintf("%s", person.Birthday5) // 13:14:15
fmt.Sprintf("%s", person.Birthday6) // 2002-08-05 13:14:15
更新日志
809 次点击
所在节点    程序员
2 条回复
jfjiefan
324 天前
在用
gouguoyin
324 天前
@jfjiefan 欢迎使用,欢迎提出宝贵意见,新版关于对 json 自定义编码解码的处理你有什么看法么

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1004295

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX