我想通過執行正常關機和其他一些小工具來擴展http.Server
的功能,這些小工具將在我的HTTP服務中共享。目前,我的代碼表示,或多或少:捕獲net.Listener傳遞給http.Server.Serve
type MyServer struct {
server *http.Server
// ...
}
func (s *MyServer) ListenAndServe() {
// Create listener and pass to s.server.Serve()
}
這工作偉大,但需要手動曝光的http.Server
所有必要的方法和變量。
包裝大多數方法不會是一個大問題,但我找不到一個明智的方法來公開訪問http.Server.ListenAndServeTLS
而不實際從the source複製實現。該方法的最後一行說srv.Serve(tlsListener)
,我很樂意提供我自己的Serve
方法,因此在將其傳遞給之前,可以修改net.Listener
。
我通過把簡單的開始鉛筆我的包裝:
type MyServer struct {
http.Server
}
func (s *MyServer) Serve(l net.Listener) {
// Wrap l with MyListener, pass to s.Server.Serve()
}
但明顯既不http.ListenAndServe
也不http.ListenAndServeTLS
將開始使用我的實施Serve
。我想問他們......有什麼辦法可以解決這個問題嗎?或者http.Server
的設計有效地阻止我解決這個問題嗎?
受歡迎的文件:即使我不在生產中使用它們,我也會獲得一些知識。
不要試圖聰明,你想要一個優雅的'net.Listener',所以提供'net.Listener'。你不需要關心誰使用它。 – Wessie 2014-12-03 01:17:18