go中的copy,一般习惯来讲都是值拷贝,但是这种拷贝存在的问题是锁对象的“失效”,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() {}

demo:

package main
 
import (
    "fmt"
)
 
type noCopy struct{}
 
// Lock is a no-op used by -copylocks checker from `go vet`.
func (*noCopy) Lock()   {}
func (*noCopy) Unlock() {}
 
type S struct {
    noCopy
    data int
}
 
func main() {
    var s S
    s.data = 10
    ss := s
    fmt.Println(ss)
}

go学习笔记 禁止拷贝noCopy

 

相关文章:

  • 2021-12-01
  • 2022-02-18
  • 2021-12-31
  • 2022-12-23
  • 2022-12-23
  • 2021-04-12
  • 2021-06-05
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2022-01-06
  • 2021-05-08
  • 2021-11-24
  • 2021-11-17
  • 2021-11-13
  • 2022-12-23
相关资源
相似解决方案