2 回答

TA貢獻(xiàn)1818條經(jīng)驗 獲得超3個贊
不,你不能做你想做的事。
你的選擇是不使用命名返回,或者像你說的那樣聲明
var usr *user.User
usr, err = user.Current()
在某些情況下,您可以這樣做,但在您的情況下,您正在創(chuàng)建一個 new ,err因為您在 if 塊中,并且它正在對 new 進(jìn)行本地范圍的引用err。

TA貢獻(xiàn)1824條經(jīng)驗 獲得超5個贊
如果您稍微重構(gòu)代碼并且不將user.Current()調(diào)用放在另一個塊中(if在您的情況下),則可以使用:= Short 變量聲明:
func getConfigFilepath(userSuppliedFilepath string) (filepath string, err error) {
if userSuppliedFilepath != "" {
return userSuppliedFilepath, nil
}
usr, err := user.Current()
filepath = path.Join(usr.HomeDir, ".myprogram.config.json")
return
}
編輯:
你可能會說這個代碼比起原來的更長,但請注意,您原來的代碼是沒有有效的,也是不完整的,因為當(dāng)它不處理的情況下userSuppliedFilepath提供。您應(yīng)該將建議的代碼與以下代碼的完整有效版本進(jìn)行比較:
func getConfigFilepath(userSuppliedFilepath string) (filepath string, err error) {
if userSuppliedFilepath == "" {
var usr *user.User
usr, err = user.Current()
filepath = path.Join(usr.HomeDir, ".myprogram.config.json")
} else {
filepath = userSuppliedFilepath
}
return
}
現(xiàn)在提議的代碼不再長(相反,它更短了一點(diǎn))。
- 2 回答
- 0 關(guān)注
- 225 瀏覽
添加回答
舉報