gpt4 book ai didi

pointers - 在接收器方法中分配给 nil 指针

转载 作者:数据小太阳 更新时间:2023-10-29 03:13:57 26 4
gpt4 key购买 nike

我正在尝试在将使用 JSON 编码/解码的结构中使用 time.Time 结构。如果未设置 time.Time 属性(omitempty 标记),则不应包含它们,因此为了能够这样做,我必须使用指向 time 的指针。时间对象。

我已经为 time.Time 结构定义了一个类型,因此我可以轻松地创建接收器函数,格式化 JSON 编码和解码的时间等。

请在此处查看代码:https://play.golang.org/p/e81xzA-dzz

所以在我的主要结构(实际将被编码的结构)中我会做这样的事情:

type EncodeThis struct {
Str string `json:"str,omitempty"`
Date *jWDate `json:"date,omitempty"`
}

问题是当尝试解码值时指针可能为 nil接收器的如果它是零。请参阅方法“设置”和“交换”。

但是,这似乎行不通。该程序不会失败或发生任何事情,但“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 结构中的 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
}
}

关于pointers - 在接收器方法中分配给 nil 指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42691509/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com