defer使用场景:

  1. 锁、文件流、客户端 等资源关闭函数
  1. 拦截panic
  1. 修改函数的返回值
  1. 输出调试信息,如日志
 

注意点:

  1. 先进先出 注册于栈 deferred 函数
  1. defer 只能接 函数和方法,但不是所有都可以,如内部函数 如 append()
  1. 一般用来做函数的收尾工作,如关闭资源等
  1. defer存在性能损耗,请用在合适的位置。不必要 不使用。
  1. defer后的表达式,在deferred函数注册到deferred栈时求值计算。