![]() |
1
cloudzhou 11 天前
是可以的,这个和个人代码风格有关,go 源代码的写法,stopped 变量作为一个独立的逻辑,后面以此作为判断,比较清晰
|
![]() |
2
ihciah 11 天前 via iPhone
这很 golang🌚外面一个 once ,cancel 里面还一个 atomic ,可能放这儿是避免给人一种复制的时候狂点 ctrl c 增大复制成功概率的感觉。
|
3
lovelylain 10 天前 via Android
要看全啊,仅看这里我的感觉是用 atomic.Bool 也能保证 stop 仅 1 次,为什么要用 sync.Once 。找来源码一看,这里是通过 sync.Once 仅执行 1 次实现要么调用 f 要么取消,调用 f 在 cancel 函数里,stop 后也会调用 cancel ,如果把 cancel 也放在 once 里调用,就可能死锁了。
|
4
liaohongxing 10 天前
看函数签名 ,主要为了返回一个 bool 值吧 !把 stopped 这个变量 return 了 ,直接 cancel 没法返回这个布尔值。
|
5
jigujigushanshan 10 天前
就是代码风格而已,比较明了,逻辑是逻辑,变量是变量 就算你写 once 里面了如果后面改 stop 还能因为其他原因变为 true 你不是还得把执行 cancel 移到外面来吗
|