3 回答
TA貢獻1804條經驗 獲得超7個贊
您的代碼中存在范圍問題:
if completeTime, err := time.Parse(time.RFC3339Nano, "2016-06-06 18:11:24.617Z"); err != nil {
return
}
fmt.Println(time.Since(completeTime).Seconds())
在此示例中,completeTime僅針對if語句內部的本地范圍定義,這意味著您不能在其外部使用它。
var completeTime time.Time
if completeTime, err := time.Parse(time.RFC3339Nano, "2016-06-06 18:11:24.617Z"); err != nil {
return
}
fmt.Println(time.Since(completeTime).Seconds())
這個有點棘手。您在開始時定義了一個completeTime具有正確范圍的 var。然后,由于運算符,您在語句中:=定義了另一個 ,它掩蓋了第一個。completeTimeif
此外,未使用第二個變量,這就是您收到錯誤的原因。completeTime您可以通過簡單地分配和err外部來解決此問題if:
completeTime, err := time.Parse(time.RFC3339Nano, "2016-06-06 18:11:24.617Z")
if err != nil {
return
}
fmt.Println(time.Since(completeTime).Seconds())
TA貢獻1815條經驗 獲得超13個贊
您需要在 if 之前聲明它(如您所見)。您的示例中變量的范圍僅限于“if”塊。對不起,如果它看起來不好看,但它就是這樣。請注意,您的第二個示例需要進行額外更改(請注意 if 行開頭的 := 更改):
var completeTime time.Time
var err error
if completeTime, err = time.Parse(time.RFC3339Nano, "2016-06-06 18:11:24.617Z"); err != nil {
return
}
fmt.Println(time.Since(completeTime).Seconds())
TA貢獻1799條經驗 獲得超9個贊
正如其他人所說,塊內的變量不會提升到塊外。else但是您可以在andelse if語句中使用聲明的變量。
例如(播放中):
func main() {
if completeTime, err := time.Parse(time.RFC3339Nano, "2016-06-06 18:11:24.617Z"); err != nil {
fmt.Println(err)
} else {
fmt.Println(time.Since(completeTime).Seconds())
}
}
您可以在規范中閱讀有關塊和范圍的更多信息。
- 3 回答
- 0 關注
- 192 瀏覽
添加回答
舉報
