什么是no copy?
Lock & Unlock 代表对一种临界资源的保护。go 提供的 vet
工具可以针对copylocks
进行检查。
但是如waitGroup
等同样需要配对操作的组件并没有更好的办法来阻止开发者。
因此在 #8005中 采用了 noCopy
的struct.
需要禁止copy就可以include 这个struct
.
为什么不能?
设想,如果允许copy lock ,会发生什么?
如上会产生意外的情况,G1的lock被copy到G2中,被意外的提前unlock
了。会导致 G3在 G1 还没有unlock
的时候,获得写数据的权限。
为了规避上述问题,采用了 noCopy
方案。