什么是no copy?

Lock & Unlock 代表对一种临界资源的保护。go 提供的 vet 工具可以针对copylocks进行检查。

但是如waitGroup 等同样需要配对操作的组件并没有更好的办法来阻止开发者。

因此在 #8005中 采用了 noCopy 的struct.

需要禁止copy就可以include 这个struct .

为什么不能?

设想,如果允许copy lock ,会发生什么?

lock

如上会产生意外的情况,G1的lock被copy到G2中,被意外的提前unlock 了。会导致 G3在 G1 还没有unlock 的时候,获得写数据的权限。

为了规避上述问题,采用了 noCopy 方案。