我在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
处理函数。
答案 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()