小编Cup*_*ate的帖子

为什么这个程序在结果中打印421?

我不明白,为什么这个程序打印421而不是431

package main

import "fmt"

var x int
func f() int {
    x++
    return x
}

func main() {
    o := fmt.Println

    defer o(f())
    defer func() {
        defer o(recover())
        o(f())
    }()

    defer f()
    defer recover()

    panic(f())
}
Run Code Online (Sandbox Code Playgroud)

下面我添加了我猜测的评论:

package main

import "fmt"

var x int
func f() int {
    x++
    return x
}

func main() {
    o := fmt.Println

    defer o(f()) // x=1
    defer func() {
        defer o(recover()) // x=3 from panic (but if we ll …
Run Code Online (Sandbox Code Playgroud)

go panic defer-keyword

-1
推荐指数
1
解决办法
82
查看次数

标签 统计

defer-keyword ×1

go ×1

panic ×1