我在某个文件中定义了一个结构device.gotype Payload struct { ... Timestamp *time.Time `json:"timestamp,omitempty"` ...}现在我想在其他文件中初始化此结构,我正在尝试此操作:payload:= &device.Payload{ .... Timestamp: time.Now(), // throws error ... //other initializations work fine}不能使用时间。Now() (时间类型的值。时间)作为*时间。结构文字中的时间值我想将变量初始化为当前 UTC 时间。我是高朗的新手。我该怎么做?
2 回答
qq_花开花谢_0
TA贡献1835条经验 获得超7个赞
时间。Now()
返回时间类型的值。时间
,这不是。*time.Time
请注意,您也不能获取函数调用的返回值的地址,也不能这样做。详情请参见如何从函数调用中获取返回值的指针?&time.Now()
您可以做的是使用类型的变量并获取其地址:time.Time
var t = time.Now() payload:= &device.Payload{ Timestamp: &t, }
另一个“流行”选项是创建一个帮助器函数来返回值的地址(您可以直接将函数调用的返回值传递给该函数):time.Time
func timePtr(t time.Time) *time.Time { return &t } payload:= &device.Payload{ Timestamp: timePtr(time.Now()), }
有关详细信息和其他选项,请参阅如何在 Go 中执行文字 *int64?
我假设你想要一个指针,因为你想要允许“缺少时间”选项,这是包尊重“丢失时间”所必需的(详细信息:JSON omitempty 随时间。时间字段)。请注意,在其他情况下,可能不需要自动转到指针:您可以使用(这是一个结构)的零值来指示“缺少时间”状态。为了轻松判断 a 是否为零值,您可以使用时间.
相关内容:表示可选时间的惯用语。结构中的时间encoding/json
time.Time
time.Time
江户川乱折腾
TA贡献1851条经验 获得超5个赞
时间。Now() 返回一个 Time 值,但您的结构正在寻找指针。将结构更改为
type Payload struct { ... Timestamp time.Time `json:"timestamp,omitempty"` ... }
从文档(https://pkg.go.dev/time#Time):
使用时间的程序通常应将它们存储并作为值(而不是指针)传递。也就是说,时间变量和结构字段的类型应为 time。时间,而不是*时间。时间。
- 2 回答
- 0 关注
- 111 浏览
添加回答
举报
0/150
提交
取消