内容简介:Go中没有原生的禁止拷贝的方式,所以如果有的结构体,你希望使用者无法拷贝,只能指针传递保证全局唯一的话,可以这么干,定义 一个结构体叫然后把执行一下:
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
以上所述就是小编给大家介绍的《Golang中实现禁止拷贝》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- Nginx 禁止未匹配域名访问
- 使用 ESLint 禁止项目导入特定模块
- TikTok宣布禁止“误导性信息”
- HashiCorp 禁止其企业软件在中国使用
- 禁止站外提交表单(author:killer)
- Chrome 66 禁止声音自动播放,开发怎么应对?
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
程序员面试宝典(第5版)
欧立奇、刘洋、段韬 / 电子工业出版社 / 2015-10 / 55.00
容提要 《程序员面试宝典(第5版)》是《程序员面试宝典》的第5 版,在保留第4 版的数据结构、面向对象、程序设计等主干的基础上,修正了前4 版近40 处错误,解释清楚一些读者提出的问题,并使用各大IT 公司及相关企业最新面试题(2014-2015)替换和补充原内容,以反映自第4 版以来两年多的时间内所发生的变化。 《程序员面试宝典(第5版)》取材于各大公司面试真题(笔试、口试、电话面试......一起来看看 《程序员面试宝典(第5版)》 这本书的介绍吧!