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