go的context的Done 源码函数
func (c *cancelCtx) Done() <-chan struct{} {
c.mu.Lock()
if c.done == nil {
c.done = make(chan struct{})
}
d := c.done
c.mu.Unlock()
return d
}
把末尾的三行代码替换成下面
defer c.mu.Unlock()
return c.done
请问大家,这两种写法有否是有差异呢?源码为什么要新建个变量再返回呢
有疑问加站长微信联系(非本文作者)

defer
再怎么也得有一定开销吧,而且是在return
之后才执行defer
我看最新版也用了
defer
没啥不同 写法爱好
没有不同
在lock和unlock之间, 有return语句, 跳出函数情况时.
defer的写法, 会确保unlock的会被执行. 另外一种写法则不会.