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://stackoverflow.com/questions/52494458/nocopy-minimal-example
https://bronzesword.medium.com/what-does-nocopy-after-first-use-mean-in-golang-and-how-12396c31de47