【发布时间】:2021-07-30 10:04:55
【问题描述】:
我在计划运行的每个例程中都有很多函数,但在我将其重构为多个线程之前,它使用全局变量将消息发送回。 在我重建它之后,例程编写了相同的变量,这会导致恐慌。
那么,我该如何解决这个问题呢?有没有办法为每个例程创建一个唯一的全局变量?
【问题讨论】:
标签: go thread-safety goroutine
我在计划运行的每个例程中都有很多函数,但在我将其重构为多个线程之前,它使用全局变量将消息发送回。 在我重建它之后,例程编写了相同的变量,这会导致恐慌。
那么,我该如何解决这个问题呢?有没有办法为每个例程创建一个唯一的全局变量?
【问题讨论】:
标签: go thread-safety goroutine
不要使用全局(包级别)变量。如果必须,请使用适当的同步。
但正如 Go 的谚语所说:
不要通过共享内存进行通信;相反,通过通信共享内存。
使用渠道来传达结果,这在设计上可以安全地并发使用。
如果所有 goroutine 都应该有状态,则将描述状态的变量分组到一个结构中,并将该结构的值传递给每个 goroutine,或者让它们创建自己的。
【讨论】: