完善内部逻辑

func handler(c *gin.Context) {
	// 定义两个变量,其一就是*websocket.Conn,其二就是error
	var (
		conn *websocket.Conn
		err  error
	)
	// 赋值变量,这里就用到了前面定义的upgrade
	// conn这结构体内有许多功能,可以都尝试一下,当一般常使用:
	// conn.ReadMessage()
	// conn.WriteMessage()
	// conn.Close()
	if conn, err = upgrade.Upgrade(c.Writer, c.Request, nil); err != nil {
		return
	}
	// 为了防止忘记关闭WebSocket连接,使用defer
	defer func(conn *websocket.Conn) {
		if err = conn.Close(); err != nil {
			return
		}
	}(conn)

	// 这里只处理客户端传什么就返回什么
	for {
		// 定义数据变量
		var (
			msgType int    // 数据类型
			data    []byte // 数据
			errMsg  error  //错误信息
		)
		// 接收数据
		if msgType, data, errMsg = conn.ReadMessage(); errMsg != nil {
			break
		}
		// 响应数据
		if errMsg = conn.WriteMessage(msgType,data); errMsg != nil{
			break
		}
	}
}
conn.ReadMessage()conn.WriteMessage()goroutine不安全goroutine