猿问

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

我在某个文件中定义了一个结构device.go


type Payload struct {

    ...

    Timestamp *time.Time  `json:"timestamp,omitempty"`

    ...

}

现在我想在其他文件中初始化此结构,我正在尝试此操作:


payload:= &device.Payload{

    ....

    Timestamp: time.Now(), // throws error

    ... //other initializations work fine

}

不能使用时间。Now() (时间类型的值。时间)作为*时间。结构文字中的时间值


我想将变量初始化为当前 UTC 时间。我是高朗的新手。我该怎么做?


开满天机
浏览 112回答 2
2回答

qq_花开花谢_0

时间。Now() 返回时间类型的值。时间,这不是。*time.Time请注意,您也不能获取函数调用的返回值的地址,也不能这样做。详情请参见如何从函数调用中获取返回值的指针?&time.Now()您可以做的是使用类型的变量并获取其地址:time.Timevar t = time.Now() payload:= &device.Payload{     Timestamp: &t, }另一个“流行”选项是创建一个帮助器函数来返回值的地址(您可以直接将函数调用的返回值传递给该函数):time.Timefunc timePtr(t time.Time) *time.Time {    return &t } payload:= &device.Payload{     Timestamp: timePtr(time.Now()), }有关详细信息和其他选项,请参阅如何在 Go 中执行文字 *int64?我假设你想要一个指针,因为你想要允许“缺少时间”选项,这是包尊重“丢失时间”所必需的(详细信息:JSON omitempty 随时间。时间字段)。请注意,在其他情况下,可能不需要自动转到指针:您可以使用(这是一个结构)的零值来指示“缺少时间”状态。为了轻松判断 a 是否为零值,您可以使用时间.相关内容:表示可选时间的惯用语。结构中的时间encoding/jsontime.Timetime.Time

江户川乱折腾

时间。Now() 返回一个 Time 值,但您的结构正在寻找指针。将结构更改为type Payload struct {     ...     Timestamp time.Time  `json:"timestamp,omitempty"`     ... }从文档(https://pkg.go.dev/time#Time):使用时间的程序通常应将它们存储并作为值(而不是指针)传递。也就是说,时间变量和结构字段的类型应为 time。时间,而不是*时间。时间。
随时随地看视频慕课网APP

相关分类

Go
我要回答