在 Go 中,我們經常撰寫在ifstatement 和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陳述句中的宣告?
uj5u.com熱心網友回復:
該有關部分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
uj5u.com熱心網友回復:
來自uber 的 go style guide代碼應該盡量減少嵌套。例如:
if a {
return a
} else {
return b
}
是一種糟糕的代碼撰寫方式。也應該洗掉這個不必要的 else。
此外,如果您需要 if 塊之后的變數,則無需使用 if 塊宣告它們。您可以閱讀 uber 的 go style 檔案,這將幫助您撰寫優雅的 go 代碼。
uj5u.com熱心網友回復:
你可以查看官方關于流量控制的 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
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/397570.html
下一篇:如何檢查電子郵件地址的格式?
