首页 > 试题广场 >

关于 defer 语句的参数求值时机,正确的是?

[单选题]
关于 defer 语句的参数求值时机,正确的是?
  • defer 函数的参数在函数返回时求值
  • defer 函数的参数在注册时立即求值
  • defer 函数的参数在包含它的 goroutine 结束时求值
  • defer 函数的参数在内存不足时求值
在项目当中函数本身就是延迟执行因此在defer行代码执行的瞬间,立刻求值,拷贝缓存后续外部变量无论怎么修改,defer内部拿到的都是当时快照值
func test() {
    a:=1
    defer fmt.println(a)//注册这一刻,a=1直接求值缓存
    a=999
}
// 输出结果:1
defer 注册时就把a的值固定死了,后面改a不影响
func Handler() {
    start :=time.Now()
    defer fmt.println("耗时:",time.s***art))
    // time.S***art)是执行时进行求值的
}
start是注册时固定的时间点
如果参数是立刻求值,才能正确统计接口整体耗时
mu.Lock()
defer mu.Unlock()
// 后续是为了方便业务逻辑通顺
主要的目的是为了锁对象注册时绑定,保证一定能正常解锁,为了后面出现死锁的现象


发表于 今天 14:34:12 回复(0)