HTTP路由器)负责侦听HTTP请求并根据匹配条件(例如HTTP方法或URL)调用适当的处理程序。
Golang提供了一个非常简单的路由器ServeMux。但它太基础简单,所以大家一般都会选择第三方路由模块,比如gorilla/mux。
今天我们来学习下如何从零自己构建一个HTTP路由。
概述
一个HTTP路由器主要负责以下几件事:
404处理程序:为不匹配的请求提供404响应
匹配:匹配URL路径和HTTP方法并调用路由处理程序
参数:提取动态网址参数,例如/users/(?Pd+)
紧急恢复:赶上紧急情况并回复500
下面是一个代码片段,展示了上述的所有功能:
r := NewRouter()r.Route("GET", "/", homeRoute)r.Route("POST", "/users", createUserRoute)r.Route("GET", "/users/(?Pd+)", getUserRoute)r.Route("GET", "/panic", panicRoute)http.ListenAndServe("localhost:8000", r)
基本路由
首先,我们构建一个路由,该路由负责响应无效请求,并返回404响应。
路由器处理进入Web服务器的每个HTTP请求,可以通过将其传递到Golang的http.ListenAndServe方法中来完成。ListenAndServe的第二个参数是http.Handler,它负责处理每个传入的请求。为了实现这一点,我们的路由器将需要实现该Handler接口。
Handler只声明一个方法,ServeHTTP所以我们创建一个结构来匹配它。
type Router struct {}func (sr *Router) ServeHTTP(w http.ResponseWriter, r *http.Request) {http.NotFound(w, r)}
这样就有一种可以在任何http.Handler接受的地方使用的路由类型。把加入到可运行的程序中httper.go。
package httperimport "