Go 类型推断和命名返回变量

标签 go

在 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/

相关文章:

python - 名称和值 - Go 与 Python

function - 戈朗 : Stack multiple method calls on one line

go - 如何将字符串转换为 JSON obj?

go - 继续-无法解析嵌套结构

windows - exec.command不在Windows(golang)上执行

go - 单值上下文中的多个值

go - 从方法或函数中将指针设置为 nil

go - 为什么我解析的HTML模板不起作用?

go - golang 中的 "&^"运算符是什么?

go - 为什么此 channel 上的发送不会被阻塞?