示例代码请访问:github.com/wenjianzhan…
示例代码
func main() {
http.HandleFunc("/", func(writer http.ResponseWriter, request *http.Request) {
fmt.Fprintf(writer, "Hello World!")
})
http.HandleFunc("/time", func(writer http.ResponseWriter, request *http.Request) {
t := time.Now()
timerStr := fmt.Sprintf("{\"time\":\"%s\"}", t)
writer.Write([]byte(timerStr))
})
http.ListenAndServe(":8090", nil)
}
DefaultRouter
func (sh serverHandler) ServerHTTO(rw ResponseWriter, req *Request) {
if handler == nil {
handler = DefaultServeMux //使用缺省的Router
}
if req.RequestRUI == "*" && req.Method == "OPTIONS" {
handler = globalOptionsHandler{}
}
handler.ServeHTTP(rw, req)
}
路由规则
- URL 分为两种,末尾是/:表示一个子树,后面可以跟其他子路径;末尾不是/,表示一个叶子,固定的路径
以/结尾的url可以匹配他的任何子路径,比如 /images 会匹配 /images/cute-cat.jpg
- 它采用最长匹配原则,如果有多个匹配,一定采用匹配路径最长的那个进行处理
- 如果没有找到任何匹配项,会返回 404 错误
示例代码请访问:github.com/wenjianzhan…