Go lang Redis PubSub在不同的go路由中进行发布和订阅

Am new to go programming language, and I have a requirement to create Redis PubSub with websocket.

My reference code is here https://github.com/vortec/orchestrate

Am using following libraries

"golang.org/x/net/websocket"

"github.com/garyburd/redigo/redis"

Everything is working for me like this way, but I don't understand what is "websocket.Handler(handleWSConnection)" here. I need 2 different go routes for /ws-subscribe and /ws-publish. I don't know anything wrong in this concept?

Doubts

  1. Can I do this way, http.HandleFunc("/ws", handleWSConnection) // Tried this way but am getting "not enough arguments in call to handleWSConnection" Is there any way to call "handleWSConnection()" as a normal function.

  2. Any suggestions how to write /ws-publish as a different go route

Following is my code

main function 
func (wsc *WSConnection) ReadWebSocket() {
    for {
        var json_data []byte
        var message WSMessage

        // Receive data from WebSocket
        err := websocket.Message.Receive(wsc.socket, &json_data)
        if err != nil {
            return
        }

        // Parse JSON data
        err = json.Unmarshal(json_data, &message)
        if err != nil {
            return
        }
        switch message.Action {
        case "SUBSCRIBE":
            wsc.subscribe.Subscribe(message.Channel)
        case "UNSUBSCRIBE":
            wsc.subscribe.Unsubscribe(message.Channel)
        case "PUBLISH":
            wsc.publish.Conn.Do("PUBLISH", message.Channel, message.Data)
        }
    }
}
func handleWSConnection(socket *websocket.Conn) {
    wsc := &WSConnection {socket: socket}
    defer wsc.Uninitialize()
    wsc.Initialize()
    go wsc.ProxyRedisSubscribe()
    wsc.ReadWebSocket()
}
func serveWeb() {
    http.Handle("/ws", websocket.Handler(handleWSConnection)) // I need to call this route as funciton 
    if err := http.ListenAndServe(":9000", nil); err != nil {
        log.Fatal("ListenAndServe:", err)
    }
}

Done following way, I dont know is it the proper way to do this

http.HandleFunc("/publish", publishHandler)


func publishHandler(conn http.ResponseWriter, req *http.Request) {
     log.Println("PUBLISH HANDLER")
     wsHandler := websocket.Handler(func(ws *websocket.Conn) {
            handleWSConnection(ws)
        })
     wsHandler.ServeHTTP(conn, req)
}