为了账号安全,请及时绑定邮箱和手机立即绑定

在 golang 中处理没有时间的日期的惯用方式是什么?

在 golang 中处理没有时间的日期的惯用方式是什么?

Go
杨__羊羊 2021-09-13 16:16:18
我正在用 Go 编写一个 REST API,处理不代表单个时间点的日期。JSON 数据以“2006-01-02”格式进出服务器,该数据使用 DATE 列与 mysql 数据库通信。我尝试过的一件事是创建一个嵌入时间的结构,并实现 JSON 和 SQL 转换接口实现,以便能够正确地与端点交互,同时仍然具有可用于日期数学和格式设置的时间方法。例如:package localdateimport (    "time"    "encoding/json"    "database/sql/driver")type LocalDate struct {    time.Time}func NewLocalDate(year int, month time.Month, day int) LocalDate {    time := time.Date(year, month, day, 0, 0, 0, 0, time.UTC)    return LocalDate{Time: time}}const LocalDateFormat = "2006-01-02" // yyyy-mm-ddfunc (ld *LocalDate) UnmarshalJSON(data []byte) error {    // parse and set the ld.Time variable}func (ld *LocalDate) MarshalJSON() ([]byte, error) {    return json.Marshal(ld.Format(LocalDateFormat))}// sql.Scanner implementation to convert a time.Time column to a LocalDatefunc (ld *LocalDate) Scan(value interface{}) error {}// sql/driver.Valuer implementation to go from LocalDate -> time.Timefunc (ld *LocalDate) Value() (driver.Value, error)  {}// used to convert a LocalDate into something we can plug into a query// we could just use ld.Time, but that would send '2015-01-01 00:00:00 +0000 UTC'// instead of '2015-01-01' for the DATE query parameter.  (Which works for mysql, but is officially invalid SQL)func (ld *LocalDate) SqlDate() string  {    return ld.Format(LocalDateFormat)}然后其他结构可以是这种类型,并在那里获得 90% 来表示我的问题域中的日期类型。上面的代码有效,但我觉得我正在与 Go 潮流作斗争。所以有几个问题要问语言的老手:你认为这段代码会带来更多的痛苦吗?如果是这样,你会推荐什么风格?
查看完整描述

2 回答

  • 2 回答
  • 0 关注
  • 153 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信