我正在尝试在将使用JSON编码/解码的结构中使用time.Time
结构。如果未设置time.Time
标记,则不应包含time.Time
属性,因此为了能够这样做,我将不得不使用指向time.Time
对象的指针。
我已经为type EncodeThis struct {
Str string `json:"str,omitempty"`
Date *jWDate `json:"date,omitempty"`
}
结构定义了一个类型,因此我很容易创建接收函数格式化JSON编码和解码等的时间。
请参阅此处的代码:omitempty
所以在我的主结构(实际将被编码的结构)中,我会做这样的事情:
RecyclerView
问题是指针在尝试解码值时可能是nil,所以如果你在Go操场上查看我的代码,你可以看到我正在尝试(使用双指针)来设置地址接收器如果没有。请参见方法“设置”和“交换”。
但是,这似乎不起作用。程序没有失败或任何东西,但“EncodeThis”结构将不包含对这个新地址的引用。有什么想法解决这个问题吗?
答案 0 :(得分:1)
使用包含指向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
}
}
如果您需要访问time.Time
结构中的jWDate
方法,则可以嵌入它。使用嵌入式类型,您仍然可以轻松访问对象的指针:
// 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
}
}