package main
import (
"fmt"
)
func main() {
fmt.Println(testRet())
}
func testRet() int {
var ret int
defer func() {
fmt.Println("执行了 defer")
ret++
}()
return ret
}
这段代码为什么返回的是 0 不是 1 ? 是我姿势不对么
1
seaZhang 2019-06-13 10:09:50 +08:00
defer 在 return 之后
|
2
yph007595 2019-06-13 10:10:07 +08:00 1
你去看看 defer 和 return 的顺序就搞明白了
要想返回 1,应该这么写 func testRet() (ret int) { defer func() { fmt.Println("执行了 defer") ret++ }() return } |
3
SuperMild 2019-06-13 10:19:12 +08:00
如果这样,就会返回 3
func testRet() (ret int) { defer func() { fmt.Println("执行了 defer") ret++ }() return 2 } |
4
lasuar 2019-06-13 10:23:20 +08:00 1
defer 是会执行,但是你 return 后面加了 ret,此时的 ret 是 0, 那你函数的返回值就已经定死,参考 2 楼
|
5
beidounanxizi 2019-06-13 10:33:41 +08:00
https://studygolang.com/articles/14831
https://blog.golang.org/defer-panic-and-recover 自己去看下哈 主要理解执行顺序 和 retvalue 含义 |
6
beidounanxizi 2019-06-13 10:36:00 +08:00
Deferred functions may read and assign to the returning function's named return values.
named return values 强调 |