欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Golang中禁止拷貝的實現(xiàn)代碼

 更新時間:2018年11月14日 09:08:39   作者:jiajunhuang  
這篇文章主要給大家介紹了關(guān)于Golang中實現(xiàn)禁止拷貝的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

前言

Go中沒有原生的禁止拷貝的方式,所以如果有的結(jié)構(gòu)體,你希望使用者無法拷貝,只能指針傳遞保證全局唯一的話,可以這么干,定義 一個結(jié)構(gòu)體叫 noCopy,要實現(xiàn) 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 嵌到你自定義的結(jié)構(gòu)體里,然后 go vet 就可以幫我們進(jìn)行檢查了。

舉個例子:

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)
}

執(zhí)行一下:

$ 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

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關(guān)文章

  • golang的httpserver優(yōu)雅重啟方法詳解

    golang的httpserver優(yōu)雅重啟方法詳解

    這篇文章主要給大家介紹了關(guān)于golang的httpserver優(yōu)雅重啟的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-03-03
  • 關(guān)于go get 下載第三方包存儲路徑問題

    關(guān)于go get 下載第三方包存儲路徑問題

    這篇文章主要介紹了關(guān)于go get 下載第三方包存儲路徑問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • 手把手帶你走進(jìn)Go語言之常量解析

    手把手帶你走進(jìn)Go語言之常量解析

    這篇文章主要介紹了Go語言之常量解析,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-09-09
  • goLand Delve版本太老的問題及解決

    goLand Delve版本太老的問題及解決

    這篇文章主要介紹了goLand Delve版本太老的問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • go語言中數(shù)據(jù)接口set集合的實現(xiàn)

    go語言中數(shù)據(jù)接口set集合的實現(xiàn)

    set集合是一種常見的數(shù)據(jù)結(jié)構(gòu),它代表了一個唯一元素的集合,本文主要介紹了set的基本特性,包括唯一性、無序性、可變性和集合運算,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-10-10
  • golang強(qiáng)制類型轉(zhuǎn)換和類型斷言

    golang強(qiáng)制類型轉(zhuǎn)換和類型斷言

    這篇文章主要介紹了詳情介紹golang類型轉(zhuǎn)換問題,分別由介紹類型斷言和類型轉(zhuǎn)換,這兩者都是不同的概念,下面文章圍繞類型斷言和類型轉(zhuǎn)換的相關(guān)資料展開文章的詳細(xì)內(nèi)容,需要的朋友可以參考以下
    2021-12-12
  • golan參數(shù)校驗Validator

    golan參數(shù)校驗Validator

    這篇文章主要介紹了golan參數(shù)校驗Validator,validator包可以通過反射結(jié)構(gòu)體struct的tag進(jìn)行參數(shù)校驗,下面來看看文章的詳細(xì)介紹吧,需要的朋友也可以參考一下
    2021-12-12
  • Go-客戶信息關(guān)系系統(tǒng)的實現(xiàn)

    Go-客戶信息關(guān)系系統(tǒng)的實現(xiàn)

    這篇文章主要介紹了Go-客戶信息關(guān)系系統(tǒng)的實現(xiàn),本文章內(nèi)容詳細(xì),具有很好的參考價值,希望對大家有所幫助,需要的朋友可以參考下
    2023-01-01
  • 一文詳解Golang中的errors包

    一文詳解Golang中的errors包

    在 Golang 中,errors 包是用于處理錯誤的標(biāo)準(zhǔn)庫, errors 包提供的功能比較簡單,使用起來非常方便,接下來就具體講解一下 errors 包提供的幾個函數(shù),感興趣的小伙伴跟著小編一起來看看吧
    2023-07-07
  • 淺談Golang內(nèi)存逃逸

    淺談Golang內(nèi)存逃逸

    本文主要介紹了Golang內(nèi)存逃逸,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08

最新評論