相关疑难解决方法(0)

为什么要命名返回参数?

命名函数的返回参数会带来什么好处?

func namedReturn(i int) (ret int) {
    ret = i
    i += 2
    return
}

func anonReturn(i int) int {
    ret := i
    i += 2
    return ret
}
Run Code Online (Sandbox Code Playgroud)

go

37
推荐指数
3
解决办法
1万
查看次数

延迟和命名的返回值如何在golang中起作用?

我刚开始学习golang,我得到了一个例子混淆有关使用推迟在golang博客文章更改名为返回值这里.

这个例子说:

  1. 延迟函数可以读取并分配给返回函数的命名返回值.

在此示例中,延迟函数在周围函数返回后递增返回值i.因此,此函数返回2:

func c() (i int) {
    defer func() { i++ }()
    return 1
}
Run Code Online (Sandbox Code Playgroud)

但正如我从A Tour of Go中学到 的 - 命名的回报值

不带参数的return语句返回指定的返回值.这被称为"裸体"回归.

我在下面的代码和函数b中测试它返回1,因为它不是上面提到的没有参数A return语句.

func a() (i int) { // return 2
    i = 2
    return
}

func b() (i int) {  // return 1 
    i = 2
    return 1
}
Run Code Online (Sandbox Code Playgroud)

所以我的问题是在第一个例子中,周围的函数c有一个命名的返回值i,但函数c使用return 1,在第二个例子中我们可以看到它应该返回1,无论我是什么值.但是为什么在我更改延迟函数后,c函数返回i的值而不是值1?

当我输入我的问题时,我可能已经猜到了答案.是因为

return 1 
Run Code Online (Sandbox Code Playgroud)

等于

i = 1
return 
Run Code Online (Sandbox Code Playgroud)

在具有命名返回值变量i的函数中?

请帮我确认一下,谢谢!

go

31
推荐指数
3
解决办法
2万
查看次数

标签 统计

go ×2