鉴于我有一片类型为User的结构
Users := make([]User)
我正在监听TCP连接,并且当用户连接时,我正在向该片中添加新用户。
我这样做的方法是建立一个NewUsers channel
NewUsers := make(chan User)
在新的TCP连接之后,用户将被发送到该 channel ,并且中央功能等待用户到达以将其添加到用户片中。
但是现在我希望多个子系统(包/功能)使用此用户列表。一个功能可能只是想接收用户列表,而另一个功能可能想向每个用户或仅满足特定条件的用户广播消息。
多个功能(可能从不同的goroutine执行)如何安全地访问用户列表。我看到两种可能的方式:
选项1看起来非常复杂,会产生很多重复,但是我的理解是,如果您尝试坚持“通过通信共享内存”的口号,则最好避免使用Mutex。
最佳答案
互斥方法是解决该问题的最佳,最安全,最易管理的方法,并且是最快的。
channel 内部是复杂的野兽,比rwmutex保护的 map /slice 慢得多。
关于go - 在一些不同的goroutine中共享 slice ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38288459/