1 回答

TA貢獻(xiàn)1871條經(jīng)驗(yàn) 獲得超8個(gè)贊
自定義處理程序結(jié)構(gòu),一個(gè)ServeMux,一個(gè)HandlerFunc和第三方路由器的所有類型http.Handler。您可以根據(jù)需要對(duì)它們進(jìn)行組合和分層。
由于 ServeMux 是一個(gè)處理程序,您可以像任何其他處理程序一樣將其分配給一個(gè)路徑,并為各種處理程序注冊(cè)單獨(dú)的路徑。這是使用多個(gè)的示例http.ServeMux(如果您選擇,可以在單獨(dú)的包中定義)。這有 3 個(gè)單獨(dú)的處理程序(通過 a 定義HandlerFunc),通過 2 路由ServeMux。
這里我們?cè)诎奥酚善鳌敝袆?chuàng)建了一個(gè) ServeMux
var Sub = http.NewServeMux()
func subHandler(w http.ResponseWriter, r *http.Request) {
fmt.Println("handled / in /sub")
w.Write([]byte("/sub/\n"))
}
func init() {
Sub.HandleFunc("/", subHandler)
}
現(xiàn)在我們可以從“路由器”導(dǎo)入 ServeMux,并在我們的頂級(jí)處理程序中使用它,以及其他一些:
import "router"
func rootHandler(w http.ResponseWriter, r *http.Request) {
fmt.Println("handled /")
w.Write([]byte("/\n"))
}
func topHandler(w http.ResponseWriter, r *http.Request) {
fmt.Println("handled /top")
w.Write([]byte("/top/\n"))
}
func main() {
mux := http.NewServeMux()
mux.HandleFunc("/", rootHandler)
mux.HandleFunc("/top/", topHandler)
// now insert the Sub routes under "/top/sub/"
mux.Handle("/top/sub/", http.StripPrefix("/top", router.Sub))
server := &http.Server{Addr: ":9999", Handler: mux}
log.Fatal(server.ListenAndServe())
}
您選擇如何注冊(cè)這些取決于您,通過像這樣在main包中導(dǎo)入和路由它們,或者通過一些其他注冊(cè)模式(例如database/sql驅(qū)動(dòng)程序)。
也不乏 3rd 方路由包來使這更容易、更高的性能或提供更高級(jí)的模式匹配方法。
- 1 回答
- 0 關(guān)注
- 174 瀏覽
添加回答
舉報(bào)