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

yujiahaol68 ·
a之后就运行 defer 就没必要用 defer了, 直接写要运行的代码就行了。 ```go { a() //relase resouce b() c() } ``` 这种场景下没有上使用 defer 的必要了
#5
更多评论
```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