2 回答
TA贡献1818条经验 获得超3个赞
不,你不能做你想做的事。
你的选择是不使用命名返回,或者像你说的那样声明
var usr *user.User
usr, err = user.Current()
在某些情况下,您可以这样做,但在您的情况下,您正在创建一个 new ,err因为您在 if 块中,并且它正在对 new 进行本地范围的引用err。
TA贡献1824条经验 获得超5个赞
如果您稍微重构代码并且不将user.Current()调用放在另一个块中(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
}
编辑:
你可能会说这个代码比起原来的更长,但请注意,您原来的代码是没有有效的,也是不完整的,因为当它不处理的情况下userSuppliedFilepath提供。您应该将建议的代码与以下代码的完整有效版本进行比较:
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
}
现在提议的代码不再长(相反,它更短了一点)。
- 2 回答
- 0 关注
- 197 浏览
添加回答
举报