在Go的http库中自定义现有的处理程序

时间:2010-08-02 09:43:32

标签: http go handler

按照http库中的说明定义以下内容:

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

如何通过给它一个额外的参数(并告诉它如何处理参数)来改进现有的处理程序(例如,websocket.Draft75Handler)?

我正在尝试创建一个包含在其中一端的通道的处理程序。它将使用该通道与程序的其他部分进行通信。如何将该通道导入处理函数?

如果这是一个愚蠢的问题,请道歉。我是新手,决定通过阅读教程然后直接进入代码来学习。谢谢你的帮助!

1 个答案:

答案 0 :(得分:2)

如果类型是函数,如websocket.Draft75Handler,则可以将其包装在闭包中:

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())
    }
}