tags:

views:

30

answers:

1

With the following being defined as is noted in the http library:

func Handle(pattern string, handler Handler)
type Handler interface { ServeHTTP(*Conn, *Request) }

How can I improve upon an existing handler (say, websocket.Draft75Handler for instance) by giving it an additional argument (and tell it what to do with the argument)?

I'm trying to create a handler that contains within it one end of a channel. It will use that channel to talk to some other part of the program. How can I get that channel into the the handler function?

Apologies if this is a silly question. I'm new at go and decided to learn by reading the tutorial and then jumping right into code. Thanks for any help!

A: 

If the type is a function, like websocket.Draft75Handler, you could wrap it in a closure:

func MyHandler(arg interface{}) websocket.Draft75Handler {
    return func(c *http.ConnConn) {
        // handle request
    }
}

func main() {
    http.Handle("/echo", MyHandler("argument"))
    err := http.ListenAndServe(":12345", nil)
    if err != nil {
        panic("ListenAndServe: " + err.String())
    }
}
MizardX