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

yujiahaol68 ·
```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
你说的在func前面加上一个defer, 那样的话func里面的内容其实是在main执行结束前才会运行, 没有达到想要的效果, ```go { a() defer内容 b() c() } ``` 想要的是a()运行之后就要运行defer, 而不是运行b(),c()之后才去运行defer, 说白了就是快速的释放一些东西
#3