Go的一些特性

package main

func d1(i int) int {
        t := i
        defer func() {
                t += 3
        }()
        return t
}

func d2(i int) *int {
        t := i
        defer func() {
                t += 3
        }()
        return &t
}

func d3(i int) (t int) {
        t = i 
        defer func() {
                t += 3       
        }()
        return t
}

func main(){
     println(d1(1))    // 1
     println(*d2(1))   // 4
     println(d3(1))    // 4
}

我的理解:return写入返回值,defer执行,最后函数携带返回值返回。d3的返回值是预先声明好的,所以defer能修改它。

 

 

package main

func main() {
    p0()
}

func p0() {
    defer println("p0 1")
    p1()
    defer println("p0 2")
}

func p1() {
    defer println("p1 1")
    panic("hehe panic\n")
    defer println("p1 2")
}

回显:

p1 1
p0 1
panic: hehe panic

goroutine 1 [running]:
main.p1()
/tmp/c.go:15 +0x6a
main.p0()
/tmp/c.go:9 +0x57
main.main()
/tmp/c.go:4 +0x20

posted on 2019-02-25 14:06  进取有乐  阅读(98)  评论(0编辑  收藏  举报

导航