Go defer 的使用注意事项

2 min read
  1. defer函数的执行时间是在函数返回之前。
  2. 如果有多个defer函数,它们是逆序执行的,即最后一个defer先执行,第一个defer最后执行。
  3. 在panic()函数被调用的时候,defer函数依然会被执行。
  4. 在循环中使用defer函数,需要格外注意,因为defer将在函数结束时才会执行,所以可能会导致在一次循环中defer的结果在下一次循环中生效。需要在循环中使用匿名函数或者将变量复制到另一个变量中避免这种情况。
  5. defer中不要使用有副作用的函数或操作,因为在执行时机不确定的情况下,可能会导致意外的结果。