Golang中defer和return执行顺序

基本执行顺序

  1. ‌返回值赋值‌:return首先将计算结果赋值给函数的返回值。
  2. 执行defer链‌:随后执行所有延迟的defer语句(按“后进先出”顺序)。
  3. 函数返回‌:最后函数携带赋值后的返回值正常退出。 ‌

关键细节

  • ‌defer的执行时机‌:所有defer语句会在函数返回前执行,无论函数是否因错误提前退出(如panic)。 ‌
  • panic‌:defer语句在panic时也会执行。 但后续逻辑及return语句不再执行。‌
  • ‌参数计算‌:defer中的参数在语句执行时确定,而非函数返回前。 ‌
  • ‌匿名与命名返回值‌:defer可以修改命名返回值,但无法修改匿名返回值。

参考