golang 怎样防止结构体对象被拷贝

主要实现Lock以及Unlock就可以了
此时使用go vet mian.go 检查就会提示我们./main1.go:25:7: assignment copies lock value to b: command-line-arguments.App contains command-line-arguments.noCopy, 使用goland ide的小伙伴也会报灰提示错误。
在ci时 go vet 检查中可以有效避免别人拷贝结构体而导致的一些不可控情况。比如源码包中的sync.waitgroup

package main

import "fmt"

type noCopy struct {

}

func (* noCopy) Lock() {

}

func (* noCopy) Unlock() {

}

type App struct {
	noCopy noCopy
	s string
}


func main() {
	var a App
	b := a
	fmt.Println(b)
}

posted on 2022-03-08 16:48  biwentao  阅读(329)  评论(0编辑  收藏  举报

导航