返回值赋值RET指令
- 返回值 = x
 - 执行defer
 - 执行SET指令
 
后defer先执行
func main()  {
    out()
}
func out() () {
    defer func() {fmt.Println("world")}()
    defer func() {fmt.Println("hello")}()
}
输入
hello
world
Process finished with the exit code 0
带返回值
不影响return返回值
func main()  {
    fmt.Println("return out put", out())
}
func out() int {
    i := 0
    defer func() {
        i++                        // 不影响return返回值
        fmt.Println("defer out put ", i)
    }()
    return i                       // 返回值=i=0; i++
}
输入
defer out put  1
return out put 0
带命名返回值
defer影响return返回值
func main()  {
    fmt.Println("return out put", out())
}
func out() (i int) {
    defer func() {
        i++                            // 影响return返回值
        fmt.Println("defer out put ", i)
    }()
    return 1                           // i=1; i++
}
输入
defer out put  2
return out put 2