Ayu*_*mar 0 struct pointers go
我在某个device.go文件中定义了一个结构
type Payload struct {
...
Timestamp *time.Time `json:"timestamp,omitempty"`
...
}
Run Code Online (Sandbox Code Playgroud)
现在我想在其他文件中初始化这个结构,我正在尝试这个:
payload:= &device.Payload{
....
Timestamp: time.Now(), // throws error
... //other initializations work fine
}
Run Code Online (Sandbox Code Playgroud)
不能使用 time.Now()(time.Time 类型的值)作为结构体中的 *time.Time 值
我想将变量初始化为当前的 UTC 时间。我是 golang 的新手。我怎么做?
time.Now()返回一个类型为 的值time.Time,它不是*time.Time。
请注意,您也不能获取函数调用返回值的地址,您也不能这样做&time.Now()。详情请参见如何从函数调用中获取返回值的指针?
您可以做的是使用类型变量time.Time并获取其地址:
var t = time.Now()
payload:= &device.Payload{
Timestamp: &t,
}
Run Code Online (Sandbox Code Playgroud)
另一个“流行”选项是创建一个辅助函数来返回time.Time值的地址(您可以将函数调用的返回值直接传递给该地址):
func timePtr(t time.Time) *time.Time {
return &t
}
payload:= &device.Payload{
Timestamp: timePtr(time.Now()),
}
Run Code Online (Sandbox Code Playgroud)
有关详细信息和其他选项,请参阅如何在 Go 中执行文字 *int64?
我假设您想要一个指针,因为您希望允许“错过时间”选项,这是encoding/json包尊重“错过时间”所必需的(详细信息:JSON omitempty With time.Time Field)。请注意,在其他情况下,可能不需要自动转向指针:您可以使用time.Time(它是一个结构体)的零值来指示“缺少时间”状态。要轻松判断 atime.Time是否为零值,您可以使用Time.IsZero(). 请参阅相关:在结构中表示可选 time.Time 的惯用方式
| 归档时间: |
|
| 查看次数: |
62 次 |
| 最近记录: |