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

yujiahaol68 ·
要想 a() 出错了, release resource 这步还能执行的话,那就只能把 release resource 放到 defer 中去了,如果放到 defer 中, 它就只能在 main 结束的时候执行了,又达不到你要求的立即释放的要求 如果要求出错后还能立即执行,这有点矛盾,毕竟 没有 try....catch 这种语法
#6
更多评论
```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