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 ? 是我姿势不对么
|  |      1seaZhang      2019-06-13 10:09:50 +08:00 defer 在 return 之后 | 
|  |      2arthurblake      2019-06-13 10:10:07 +08:00  1 你去看看 defer 和 return 的顺序就搞明白了 要想返回 1,应该这么写 func testRet() (ret int) { defer func() { fmt.Println("执行了 defer") ret++ }() return } | 
|      3SuperMild      2019-06-13 10:19:12 +08:00 如果这样,就会返回 3 func testRet() (ret int) { defer func() { fmt.Println("执行了 defer") ret++ }() return 2 } | 
|  |      4lasuar      2019-06-13 10:23:20 +08:00  1 defer 是会执行,但是你 return 后面加了 ret,此时的 ret 是 0, 那你函数的返回值就已经定死,参考 2 楼 | 
|  |      5beidounanxizi      2019-06-13 10:33:41 +08:00 https://studygolang.com/articles/14831 https://blog.golang.org/defer-panic-and-recover 自己去看下哈 主要理解执行顺序 和 retvalue 含义 | 
|  |      6beidounanxizi      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 强调 |