在接收器方法中分配给NIL指针



我正在尝试在将用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
    }
}

最新更新