http.Handle("/",websocket.Handler(EchoServer)可以EchoServer获取除ws之外的其他参数吗?

Far*_*rah 4 go websocket

我打开了一个websocket服务器来向web组件发送数据,

func WebSocketServer() {
    http.Handle("/", websocket.Handler(Echoserver))
    err := http.ListenAndServe(":8081", nil)
    CheckError(err)
}
Run Code Online (Sandbox Code Playgroud)

我想将一个附加参数(msg,类型为String)传递给handlerfunction(Echoserver).

func Echoserver(ws *websocket.Conn, msg String) {
    fmt.Println("Client Connected")
         _ := websocket.JSON.Send(ws, msg);
    }
}
Run Code Online (Sandbox Code Playgroud)

是否可以使用上面的语法执行此操作?你如何用附加参数调用Echoserver?

Rob*_*ier 5

我假设你想要的是string为/的所有连接返回的一致参数.我使用过几种方法.(这些特定代码示例都没有经过测试;如果不编译,我可以提取一些实际代码.)

一种是让数据成为接收者.我最经常使用这个结构,但任何参数都可以.这仅适用于单个参数(但您当然可以在结构中放置多个参数).当参数是"像对象"时,我喜欢这种方法.(通常是一个包含其他方法的结构.)

type echoStuff string

var hey echoStuff = "Hey!"

http.Handle("/", websocket.Handler(hey.EchoServer))
err := http.ListenAndServe(":8081", nil)
CheckError(err)

func (msg echoStuff) Echoserver(ws *websocket.Conn) {
  fmt.Println("Client Connected")
   _ := websocket.JSON.Send(ws, msg);
}
Run Code Online (Sandbox Code Playgroud)

另一种方法是关闭.当参数是"数据类似"时,我喜欢这种方法.(类似字符串或其他简单数据.注意这种方法不需要创建本地类型.)

func WebSocketServer() {
  http.Handle("/", echoHandler("Hey!"))
  err := http.ListenAndServe(":8081", nil)
  CheckError(err)
}

func echoHandler(msg string) websocket.Handler {
  return func(ws *Conn) {
    Echoserver(ws, msg)
  }
}
Run Code Online (Sandbox Code Playgroud)