我有以下结构
type Groups struct {
sync.Mutex
Names []strng
}
和以下功能
func NewGroups(names ...string) (Groups, error) {
// ...
return groups, nil
}
当我使用go vet
检查语义错误时,我收到此警告:
NewGroups returns Lock by value: Groups
当go vet
大喊大叫时,它不好,这段代码会带来什么问题?
我该如何解决这个问题?
答案 0 :(得分:11)
您需要将sync.Mutex嵌入指针:
type Groups struct {
*sync.Mutex
Names []strng
}
解决你对你的问题的评论:在文章http://blog.golang.org/go-maps-in-action中注意到Gerrand没有从函数返回结构但是立即使用它,这就是他没有使用指针的原因。在您的情况下,您将返回它,因此您需要一个指针,以便不制作互斥锁的副本。
更新:正如@JimB指出的那样,将指针嵌入sync.Mutex
可能不谨慎,最好返回指向外部结构的指针并继续将sync.Mutex
嵌入为一个值。考虑一下您在特定情况下要完成的任务。