前言
Go中没有原生的禁止拷贝的方式,所以如果有的结构体,你希望使用者无法拷贝,只能指针传递保证全局唯一的话,可以这么干,定义 一个结构体叫 noCopy,要实现 sync.Locker 这个接口
方法如下:
// noCopy may be embedded into structs which must not be copied // after the first use. // // See https://golang.org/issues/8005#issuecomment-190753527 // for details. type noCopy struct{} // Lock is a no-op used by -copylocks checker from `go vet`. func (*noCopy) Lock() {} func (*noCopy) UnLock() {}
然后把 noCopy 嵌到你自定义的结构体里,然后 go vet 就可以帮我们进行检查了。
举个例子:
package main import ( "fmt" ) type noCopy struct{} func (*noCopy) Lock() {} func (*noCopy) Unlock() {} type Demo struct { noCopy noCopy } func Copy(d Demo) { CopyTwice(d) } func CopyTwice(d Demo) {} func main() { d := Demo{} fmt.Printf("%+v", d) Copy(d) fmt.Printf("%+v", d) }
执行一下:
$ go vet main.go # command-line-arguments ./main.go:16: Copy passes lock by value: main.Demo contains main.noCopy ./main.go:17: call of CopyTwice copies lock value: main.Demo contains main.noCopy ./main.go:19: CopyTwice passes lock by value: main.Demo contains main.noCopy ./main.go:23: call of fmt.Printf copies lock value: main.Demo contains main.noCopy ./main.go:25: call of Copy copies lock value: main.Demo contains main.noCopy ./main.go:27: call of fmt.Printf copies lock value: main.Demo contains main.noCopy
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对小牛知识库的支持。
本文向大家介绍深拷贝浅拷贝的区别和实现?相关面试题,主要包含被问及深拷贝浅拷贝的区别和实现?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 数组的浅拷贝: 如果是数组,我们可以利用数组的一些方法,比如slice,concat方法返回一个新数组的特性来实现拷贝,但假如数组嵌套了对象或者数组的话,使用concat方法克隆并不完整,如果数组元素是基本类型,就会拷贝一份,互不影响,而如果是对象或数
本文向大家介绍java 实现文件夹的拷贝实例代码,包括了java 实现文件夹的拷贝实例代码的使用技巧和注意事项,需要的朋友参考一下 java 实现文件夹的拷贝实例代码 这里就直接上代码,废话不多说,很简单很实用。 实例代码: 感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
本文向大家介绍Java Clone深拷贝与浅拷贝的两种实现方法,包括了Java Clone深拷贝与浅拷贝的两种实现方法的使用技巧和注意事项,需要的朋友参考一下 1.首先,你要知道怎么实现克隆:实现Cloneable接口,在bean里面重写clone()方法,权限为public。 2.其次,你要大概知道什么是地址传递,什么是值传递。 3.最后,你要知道你为什么使用这个clone方法。 先看第一条,简
本文向大家介绍jQuery的属性拷贝(extend)的实现原理是什么,如何实现深拷贝?相关面试题,主要包含被问及jQuery的属性拷贝(extend)的实现原理是什么,如何实现深拷贝?时的应答技巧和注意事项,需要的朋友参考一下 [jQuery] jQuery的属性拷贝(extend)的实现原理是什么,如何实现深拷贝?
本文向大家介绍Python浅拷贝与深拷贝用法实例,包括了Python浅拷贝与深拷贝用法实例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Python浅拷贝与深拷贝用法。分享给大家供大家参考。具体分析如下: 浅拷贝,创造了新的对象,但是它的对象引用确和被拷贝对象一致。 如果被拷贝对象的构成元素是不可变类型,则拷贝对象对这个元素的改变,实际上是创造一个新的对象。 如果被拷贝对象的构成元素是可
本文向大家介绍C/C++ 浅拷贝和深拷贝的实例详解,包括了C/C++ 浅拷贝和深拷贝的实例详解的使用技巧和注意事项,需要的朋友参考一下 C/C++ 浅拷贝和深拷贝的实例详解 深拷贝是指拷贝对象的具体内容,而内存地址是自主分配的,拷贝结束之后,两个对象虽然存的值是相同的,但是内存地址不一样,两个对象也互不影响,互不干涉。 浅拷贝就是对内存地址的复制,让目标对象指针和源对象指向同一片内存空间. 浅拷贝