noCopy 出现在好多golang的标准库中,主要是说明数据类型不能进行值copy,而且好多
golang 标准库实现文档也会有提示的,如果我们希望自己实现的数据结构不能进行copy
就可以自己实现类似的数据结构,然后我们通过go vet 就可以进行检查了
方法签名
主要实现Lock以及Unlock就可以了
Lock() {}
Unlock() {}
参考例子
- main.go
package main
import (
"fmt"
"sync"
)
type noCopy struct {
}
func (*noCopy) Lock() {}
func (*noCopy) Unlock() {}
type App struct {
noCopy noCopy
sync.Mutex
Name string `json:"name"`
Type string `json:"type"`
}
func (a *App) Login() error {
fmt.Println("app login")
return nil
}
type Mydemo struct {
App
sync.Mutex
Myversion string
}
func (a *Mydemo) demo() {
a.Login()
}
func main() {
mux := sync.Mutex{}
myapp := App{
Mutex: mux,
Name: "demoapp",
Type: "v1",
}
mydemo := Mydemo{
App: myapp,
Mutex: mux,
}
mydemo2 := Mydemo{
App: myapp,
Mutex: mux,
Myversion: "demopp",
}
mydemo.demo()
mydemo2.Login()
mydemo2.demo()
}
- vscode 提示
- go vet 效果
参考资料
https://*.com/questions/52494458/nocopy-minimal-example
https://bronzesword.medium.com/what-does-nocopy-after-first-use-mean-in-golang-and-how-12396c31de47