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

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

是否應該將 return err 放入帶有聲明的 if 語句的 else 中,或者避免這種風格并超出

是否應該將 return err 放入帶有聲明的 if 語句的 else 中,或者避免這種風格并超出

Go
哈士奇WWW 2022-10-24 09:10:23
在 Go 中,我們經常在語句中編寫帶有聲明的代碼,if并且return err. 像這樣:    if res, err := getResult(); err != nil {        return err    } else {        fmt.Println(res)        // do something with res    }但是 linter 總是告訴我應該在else之后刪除塊return:  ?  https://revive.run/r#indent-error-flow  if block ends with a return statement, so drop this else and outdent its block (move short variable declaration to its own line if necessary)代碼片段應如下所示以滿足建議:    res, err := getResult()    if err != nil {        return err    }    fmt.Println(res)    // do something with res看來我們應該避免在語句中使用if聲明。那么正確的 Go 風格是什么?我應該如何處理聲明中的if聲明?
查看完整描述

3 回答

?
叮當貓咪

TA貢獻1776條經驗 獲得超12個贊

Effective Go 中about 部分if對此提供了一些指導:

如果成功的控制流順著頁面向下運行,則代碼可讀性很好,從而消除了出現的錯誤情況。由于錯誤情況往往以return語句結尾,因此生成的代碼不需要else語句。


f, err := os.Open(name)

if err != nil {

  return err

}

d, err := f.Stat()

if err != nil {

  f.Close()

  return err

}

codeUsing(f, d)

如果你堅持這種風格,并且如果你打算error在你的“幸福路徑”中使用非結果,那么你根本不能在簡單語句中將函數的結果聲明為變量,可以if在語句的條件之前;您別無選擇,只能將該變量聲明放在if. 但是,如果函數只返回一個error(或者您不關心它的其他結果),您可以自由地將變量聲明放在if:


// within some HTTP handler

var u User

dec := json.NewDecoder(w)

if err := dec.Decode(&u) {

   w.WriteHeader(http.StatusBadRequest)

   return

}

// use u


查看完整回答
反對 回復 2022-10-24
?
holdtom

TA貢獻1805條經驗 獲得超10個贊

你可以查看官方的 GO 流量控制教程:https ://go.dev/tour/flowcontrol/7


func pow(x, n, lim float64) float64 {

if v := math.Pow(x, n); v < lim {

    return v

} else {

    fmt.Printf("%g >= %g\n", v, lim)

}

// can't use v here, though

return lim

}


查看完整回答
反對 回復 2022-10-24
?
Smart貓小萌

TA貢獻1911條經驗 獲得超7個贊

從uber 的 go 風格指南代碼應該盡可能減少嵌套。例如:


if a {

    return a

} else {

    return b

}

是一種糟糕的代碼編寫方式。這個不必要的 else 也應該被刪除。


此外,如果您需要 if 塊之后的變量,則無需使用 if 塊聲明它們。你可以閱讀 uber 的 go style 文檔,它會幫助你編寫優雅的 go 代碼。


分享

編輯

跟隨


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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