国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Golang > 正文

Golang中禁止拷貝的實現代碼

2020-04-01 18:51:14
字體:
來源:轉載
供稿:網友

前言

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 mainimport ("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
  • https://golang.org/issues/8005#issuecomment-190753527
  • https://github.com/jiajunhuang/go/blob/annotated/src/sync/cond.go#L94:6
  • https://stackoverflow.com/questions/52494458/nocopy-minimal-example

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對VEVB武林網的支持。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 新营市| 寻甸| 依兰县| 原平市| 连平县| 蛟河市| 嘉义市| 湘潭市| 东平县| 威信县| 静乐县| 北安市| 抚州市| 揭西县| SHOW| 巴林右旗| 明星| 都昌县| 龙井市| 乳山市| 定州市| 泰安市| 河曲县| 习水县| 隆安县| 类乌齐县| 新安县| 西畴县| 酉阳| 南涧| 巨野县| 涞源县| 朝阳市| 德州市| 滨海县| 西吉县| 河源市| 长子县| 泉州市| 彭阳县| 九寨沟县|