在goroutine中使用指针接收器

Kee*_*eto 5 concurrency go goroutine

我有一个带指针接收器的方法,我想知道在这个方法中使用这个指针接收器是否可以安全地在goroutine中使用?或者我应该将此指针接收器作为参数传递?

例如:

func (m *dummyStruct) doSomething {
    /* do a bunch of stuff */
    go func() {
        m.a = x
        m.doSomethingElse()
    }()
    return y
}
Run Code Online (Sandbox Code Playgroud)

我知道通过将m作为参数传递给goroutine我不会出错,但我想知道是否非常必要

edu*_*911 6

如果要修改状态m,则需要使用互斥锁和小心锁定模式.

除此之外,在大多数情况下,这将增加跨线程边界的上下文切换.

这就是为什么我们有Go成语:

不要通过共享内存进行通信; 相反,通过沟通分享记忆.

https://blog.golang.org/share-memory-by-communicating