我正在尝试在将用JSON编码/解码的结构中使用time.Time
结构。如果不设置time.Time
属性(省略标签),则不应包括其中,因此我必须使用指向time.Time
对象的指针。
我已经为time.Time
结构定义了一种类型,因此我可以轻松地创建接收器函数,以编码和解码JSON等时间。
请参阅此处的代码:https://play.golang.org/p/e81xza-dzz
因此,在我的主要结构(实际将要编码的结构)中,我会做这样的事情:
type EncodeThis struct {
Str string `json:"str,omitempty"`
Date *jWDate `json:"date,omitempty"`
}
问题是指针可能是零,当试图解码该值时,因此,如果您在Go Playground上查看我的代码,您可以看到我想(使用双指针)设置地址接收器的零。参见方法"设置"one_answers"交换"。
但是,这似乎不起作用。该程序不会失败或其他任何内容,但是" Encodethis"结构将不包含对该新地址的引用。对此有什么想法?
将您的日期对象与包含time.Time
对象指针的结构包装。
// JWDate: Numeric date value
type jWDate struct {
date *time.Time
}
func (jwd *jWDate) Set(t *time.Time) {
if jwd.date == nil {
jwd.date = t
}
}
如果您需要从jWDate
struct访问time.Time
方法,则可以嵌入它。使用嵌入式类型,您仍然可以轻松访问对象的指针:
// JWDate: Numeric date value
type jWDate struct {
*time.Time // Embedded `time.Time` type pointer, not just an attribute
}
func (jwd *jWDate) Set(t *time.Time) {
if jwd.Time == nil {
jwd.Time = t
}
}