函数按值返回锁定

时间:2016-05-15 18:19:25

标签: go

我有以下结构

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大喊大叫时,它不好,这段代码会带来什么问题? 我该如何解决这个问题?

1 个答案:

答案 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嵌入为一个值。考虑一下您在特定情况下要完成的任务。