为了账号安全,请及时绑定邮箱和手机立即绑定

咕噜咕噜 - 如何将值初始化为*时间。时间

咕噜咕噜 - 如何将值初始化为*时间。时间

Go
开满天机 2022-09-26 19:36:49
我在某个文件中定义了一个结构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/jsontime.Timetime.Time


查看完整回答
反对 回复 2022-09-26
?
江户川乱折腾

TA贡献1851条经验 获得超5个赞

时间。Now() 返回一个 Time 值,但您的结构正在寻找指针。将结构更改为

type Payload struct {
    ...
    Timestamp time.Time  `json:"timestamp,omitempty"`
    ...
}

从文档(https://pkg.go.dev/time#Time):

使用时间的程序通常应将它们存储并作为值(而不是指针)传递。也就是说,时间变量和结构字段的类型应为 time。时间,而不是*时间。时间。


查看完整回答
反对 回复 2022-09-26
  • 2 回答
  • 0 关注
  • 111 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信