我在某個文件中定義了一個結構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 關注
- 135 瀏覽
添加回答
舉報
0/150
提交
取消