gpt4 book ai didi

go - defer和命名返回值的顺序是什么

转载 作者:行者123 更新时间:2023-12-03 08:14:34 26 4
gpt4 key购买 nike

看看这两段代码:

// return 0
func f() int {
res := 0
defer func(){
res++
}()
return res
}

我知道defer表达式是在return表达式之后执行的。但是当有一个命名的返回值时,为什么会有所不同呢?为什么以下函数不返回 0

// return 1
func f() (res int) {
res = 0
defer func(){
res++
}()
return res
}

最佳答案

执行顺序为:

  1. return 语句设置结果参数。
  2. 延迟调用执行。
  3. 函数返回结果参数。

延迟函数可以在函数返回之前修改命名结果参数。

第一个示例中的延迟函数修改局部变量 res,而不是未命名的结果参数。函数 f 返回 0,因为 return 将结果参数设置为 0,并且延迟函数不会更改结果参数。

第二个函数返回 1,因为延迟函数修改了结果参数 res

关于go - defer和命名返回值的顺序是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69818560/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com