亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何正確初始化一些變量?

如何正確初始化一些變量?

Go
慕尼黑5688855 2022-01-17 16:13:23
如果我使用變量聲明 into if,我會得到一個錯誤undefined: completeTime    if completeTime, err := time.Parse(time.RFC3339Nano, "2016-06-06 18:11:24.617Z"); err != nil {          return        }    fmt.Println(time.Since(completeTime).Seconds())但是如果我聲明,我會得到一個錯誤 completeTime declared and not used    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())為什么以及如何正確地做到這一點?
查看完整描述

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())


查看完整回答
反對 回復 2022-01-17
?
蕭十郎

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())


查看完整回答
反對 回復 2022-01-17
?
揚帆大魚

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())

    }

}

您可以在規范中閱讀有關塊和范圍的更多信息。


查看完整回答
反對 回復 2022-01-17
  • 3 回答
  • 0 關注
  • 192 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號