q平面人: 问了deepseek,答复是用 解决方案:使用共享锁保护共享资源 核心思路是将 连接(*) 和 对应的互斥锁 绑定成一个原子单元,确保所有操作都通过同一个锁进行同步。 1. 定义带锁的 SafeConn 包装结构 创建一个专门的结构体,将连接和锁组合在一起: go 复制 type SafeConn struct { conn * mu } func NewSafeConn(conn *) *SafeConn { return &SafeConn{conn: conn} } // 线程安全的 WriteMessage 方法 func (sc *SafeConn) WriteMessage(messageType int, data []byte) error { () defer () return (messageType, data) } 2. 修改 User 和 Message 结构 让两个结构体共享同一个 SafeConn 实例,而不是直接持有 *: go 复制 type User struct { safeConn *SafeConn // 其他字段... } type Message struct { safeConn *SafeConn // 其他字段... } 3. 统一通过 SafeConn 写入 所有写入操作都调用 (),由它内部统一加锁: go 复制 // User 发送消息 func (u *User) Send() { data := []byte("user message") (, data) } // Message 发送消息 func (m *Message) Send() { data := []byte("message content")
docker查看日志的三种方式
[go] 解决:concurrent write to websocket connection