3 回答

TA貢獻(xiàn)1776條經(jīng)驗(yàn) 獲得超12個(gè)贊
Effective Go 中的about 部分if
對(duì)此提供了一些指導(dǎo):
如果成功的控制流順著頁(yè)面向下運(yùn)行,則代碼可讀性很好,從而消除了出現(xiàn)的錯(cuò)誤情況。由于錯(cuò)誤情況往往以return語(yǔ)句結(jié)尾,因此生成的代碼不需要else語(yǔ)句。
f, err := os.Open(name)
if err != nil {
return err
}
d, err := f.Stat()
if err != nil {
f.Close()
return err
}
codeUsing(f, d)
如果你堅(jiān)持這種風(fēng)格,并且如果你打算error在你的“幸福路徑”中使用非結(jié)果,那么你根本不能在簡(jiǎn)單語(yǔ)句中將函數(shù)的結(jié)果聲明為變量,可以if在語(yǔ)句的條件之前;您別無(wú)選擇,只能將該變量聲明放在if. 但是,如果函數(shù)只返回一個(gè)error(或者您不關(guān)心它的其他結(jié)果),您可以自由地將變量聲明放在if:
// within some HTTP handler
var u User
dec := json.NewDecoder(w)
if err := dec.Decode(&u) {
w.WriteHeader(http.StatusBadRequest)
return
}
// use u

TA貢獻(xiàn)1805條經(jīng)驗(yàn) 獲得超10個(gè)贊
你可以查看官方的 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
}

TA貢獻(xiàn)1911條經(jīng)驗(yàn) 獲得超7個(gè)贊
從uber 的 go 風(fēng)格指南代碼應(yīng)該盡可能減少嵌套。例如:
if a {
return a
} else {
return b
}
是一種糟糕的代碼編寫方式。這個(gè)不必要的 else 也應(yīng)該被刪除。
此外,如果您需要 if 塊之后的變量,則無(wú)需使用 if 塊聲明它們。你可以閱讀 uber 的 go style 文檔,它會(huì)幫助你編寫優(yōu)雅的 go 代碼。
分享
編輯
跟隨
- 3 回答
- 0 關(guān)注
- 145 瀏覽
添加回答
舉報(bào)