源码疑惑---求解,这两种写法有什么不同吗?

martin_yyds · · 2137 次点击
在lock和unlock之间, 有return语句, 跳出函数情况时. defer的写法, 会确保unlock的会被执行. 另外一种写法则不会.
#4
更多评论
jan-bar
想要拥有,必定付出。
`defer`再怎么也得有一定开销吧,而且是在`return`之后才执行`defer` 我看最新版也用了`defer` ```go func (c *cancelCtx) Done() <-chan struct{} { d := c.done.Load() if d != nil { return d.(chan struct{}) } c.mu.Lock() defer c.mu.Unlock() d = c.done.Load() if d == nil { d = make(chan struct{}) c.done.Store(d) } return d.(chan struct{}) } ```
#1
没啥不同 写法爱好
#2