Go 中 defer 的 5 个坑 - 第一部分

yujiahaol68 ·
第一个例子后面少了一对 ()吧? func() { var run func() = nil defer run() fmt.Println("runs") }()
#7
更多评论
```go func main() { //1 func() { defer func() { fmt.Println("func: defer runs") }() fmt.Println("func: ends") }() fmt.Println("main: ends") } ``` 按你这样写的话也有问题,一般会在//1处加上业务代码,如果出错了下面是运行不到的,如果将defer的func放前面, 业务代码还没有 运行又作了回收工作 我感觉defer用久了,感觉越来越不敢乱用了
#1
``` func main() { //1业务代码出错了 defer func() { defer func() { fmt.Println("func: defer runs") }() fmt.Println("func: ends") }() fmt.Println("main: ends") } ``` 如果这func 前面再加一个 defer, 当 //1的业务代码出错了. func中的代码还是能执行的吧
#2