在 Go 中,如果您为返回变量命名,它们将在函数开始时被初始化为零值。我在下面将此功能与 usr, err = user.Current()
行上的 err
变量一起使用。是否可以对 usr
变量而不是 err
变量使用类型推断?我真的不想声明 var usr *user.user
我更愿意在这里使用类型推断。
func getConfigFilepath(userSuppliedFilepath string) (filepath string, err error) {
if userSuppliedFilepath == "" {
usr, err = user.Current()
filepath = path.Join(usr.HomeDir, ".myprogram.config.json")
}
return
}
最佳答案
不,你不能做你想做的。
你的选择是不使用命名返回,或者像你说的那样声明
var usr *user.User
usr, err = user.Current()
在某些情况下你可以这样做,但在你的情况下你正在创建一个新的 err
因为你在 if block 中并且它正在对新的 进行局部范围的引用错误
。
关于Go 类型推断和命名返回变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28314691/