在现实的项目开发过程中,都有 Nocpoy 对象的需求,那么如何在golang中实现这个特性呢?Go中没有原生的禁止拷贝的方式,所以如果有的结构体,你希望使用者无法拷贝,只能指针传递保证全局唯一的话,可以这么干,定义 一个结构体叫 noCopy,要实现 sync.Locker 这个接口
1 | type noCopy struct{} |
然后把 noCopy 嵌到你自定义的结构体里,然后 go vet 就可以帮我们进行检查了
1 | package main |
运行go代码静态检查, go vet main.go
遗憾的是golang至1.13版本仍然没有添加语法层面的nocopy实现,上面例子仍然可以运行