在Godoc它明确提出

并发 连接支持一个并发的读写器和一个并行的作家。 (NextWriter,SetWriteDeadline,WriteMessage,WriteJSON,EnableWriteCompression,SetCompressionLevel)并且不超过一个goroutine调用读取方法(NextReader,SetReadDeadline,ReadMessage ,ReadJSON,SetPongHandler,SetPingHandler)。

Close和WriteControl方法可以与所有其他方法同时调用 方法。

然而,在由包提供的示例中的一个

func (c *Conn) readPump() { 
    defer func() { 
     hub.unregister <- c 
     c.ws.Close() 
    }() 
    c.ws.SetReadLimit(maxMessageSize) 
    c.ws.SetReadDeadline(time.Now().Add(pongWait)) 
    c.ws.SetPongHandler(func(string) error { 
     c.ws.SetReadDeadline(time.Now().Add(pongWait)); return nil 
    }) 
    for { 
     _, message, err := c.ws.ReadMessage() 
     if err != nil { 
      if websocket.IsUnexpectedCloseError(err, websocket.CloseGoingAway) { 
       log.Printf("error: %v", err) 
      } 
      break 
     } 
     message = bytes.TrimSpace(bytes.Replace(message, newline, space, -1)) 
     hub.broadcast <- message 
    } 
} 

此行

c.ws.SetPongHandler(func(string) error { 
    c.ws.SetReadDeadline(time.Now().Add(pongWait)); return nil 
}) 

和这条线

_, message, err := c.ws.ReadMessage() 
serveWs
SetReadDeadlineReadMessageSetPongHandlerSetPingHandler
ReadMessage

有没有更好的方法来处理这个并发问题?提前致谢。