Inspired By:

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

切忌在循环中使用 defer,除非你清楚自己在做什么,因为它们的执行结果常常会出人意料。在循环中的延迟函数会在函数结束过后运行,而不是每次 for 循环结束之后。这些延迟函数会不停地堆积到延迟调用栈中,最终可能会导致一些不可预知的问题。

  1. 不使用 defer ,直接在末尾调用*.Close()
  2. 将任务转交给另一个函数然后在里面使用 defer,在下面这种情况下,延迟函数会在每次匿名函数执行结束后执行。