如何将net / http传递给其他包

时间:2014-05-10 14:25:36

标签: go

我在http服务器上使用下面的代码片段。

主包中的

http.HandleFunc("/aa", aahandler)
http.Handle("/echo", websocket.Handler(bbhandler.Wshandle))  
...
http.ListenAndServe()

bbhandler是自定义的包 以上代码有效。

现在我想在bbhandler中添加一个函数Register

Register() {
    http.Handle("/echo", websocket.Handler(Wshandle))  
    ... 
}

并且主程序包代码段将变为:

http.HandleFunc("/aa", aahandler)
bbhandler.Register()
...
http.ListenAndServe()

但是上面的代码似乎不起作用,因为主程序无法处理/echo,似乎bbhandler.Register不会将/echo添加到主http中,所以我怎么能通过main的http进入bbhandler并添加/echo处理函数。

1 个答案:

答案 0 :(得分:1)

这应该有效。两个调用都使用http.DefaultServeMux,这是一个包级变量,对于两个导入都是同一个对象。

那就是说,如果你将*http.ServeMux传递给Register会更好设计,这样调用者就能控制添加处理程序的位置:

Register(mux *http.ServeMux) {
    mux.Handle("/echo", websocket.Handler(Wshandle))  
    ... 
}

main

http.HandleFunc("/aa", aahandler)
bbhandler.Register(http.DefaultServeMux)
...
http.ListenAndServe()