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

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

未定義的錯誤變量

未定義的錯誤變量

Go
冉冉說 2021-11-08 15:58:18
作為 Go“新手”,我不確定為什么在編譯程序時在控制臺中收到錯誤undefined err和undefined user。我有:if req.Id == nil {    user, err := signup(C, c, &req)} else {    user, err := update(C, c, &req)}if err != nil {    c.JSON(http.StatusOK, err)    return}doSomethingWith(user)我意識到我可以在條件塊之前聲明erranduser變量,但我想知道為什么這不起作用。這與一次性創建兩個新變量有關嗎?UDPATE 對此有點混亂。我現在有:user := core.User{}if req.Id == nil {    user, err := signup(C, c, &req)} else {    user, err := update(C, c, &req)}cleanUser(&user)我的錯誤現在是用戶聲明的,而不是使用的。我目前沒有解決錯誤部分,但我不確定為什么我會收到關于用戶的錯誤。
查看完整描述

1 回答

?
忽然笑

TA貢獻1806條經驗 獲得超5個贊

這是因為err您正在創建的變量的范圍:它僅在范圍內(因此有效/可引用)直到您聲明它的最內層塊的末尾。


規范:聲明和范圍


在函數內聲明的常量或變量標識符的范圍從 ConstSpec 或 VarSpec(短變量聲明的 ShortVarDecl)的末尾開始,并在最里面的包含塊的末尾結束。


當您在if語句之前聲明它時,它將在容器塊結束之前一直處于范圍內,其中還包括if您測試err變量的第二個位置,所以沒關系。


UDPATE:


更新您的更新:您使用了一個Short 變量聲明來創建新變量,因為您在新塊中使用了它。您尚未使用這些新變量(僅在user內部塊外聲明的“其他”變量)因此出現編譯時錯誤“用戶聲明但未使用”。


解決方案很簡單:只需在 之前聲明兩個變量if,不要使用短變量聲明,而是簡單地賦值:


user := core.User{}

var err error


if req.Id == nil {

    user, err = signup(C, c, &req)

} else {

    user, err = update(C, c, &req)

}


if err == nil {

    cleanUser(&user)

}

或者使用一行來聲明user和err:


user, err := core.User{}, error(nil)


查看完整回答
反對 回復 2021-11-08
  • 1 回答
  • 0 關注
  • 252 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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