近期公司在搞季度考核,一直在忙新功能的开发和指导新人入门。
golang中有一个ServeMux标准库,这个不说明,本文章主要介绍gorilla/mux包这个强大的url路由器与调度器。
支持URL解析中访问方法与字段,通过正则表达式匹配,也可以设置网站名,还可以自己组URL等其它动作。
代码面前没有隐私。。
package main
import (
"fmt"
"github.com/gorilla/mux"
"net/http"
)
func main() {
fmt.Println("hello go world!!")
r := mux.NewRouter()
r.HandleFunc("/", HomeHandler)
s := r.PathPrefix("/products").Subrouter()
s.HandleFunc("/{key}", ProductsHandler)
r.HandleFunc("/articles/{category}", ArticlesHandler)
r.HandleFunc("/articles/{category}/{id:[0-9]+}", ArticlesHandler)
http.Handle("/", r)
http.ListenAndServe(":8080", nil)
}
func HomeHandler(http.ResponseWriter, *http.Request) {
fmt.Println("test home handler")
}
func ProductsHandler(http.ResponseWriter, *http.Request) {
fmt.Println("test product handler")
}
func ArticlesHandler(http.ResponseWriter, *http.Request) {
fmt.Println("test articles handler")
}
匹配访问方法与字段:
s.HandleFunc("/articles/{category}/{id:[0-9]+}"), ArticleHandler)
内部路由功能
r := mux.NewRouter() s := r.PathPrefix("/products").Subrouter() // "/products/" s.HandleFunc("/", ProductsHandler) // "/products/{key}/" s.HandleFunc("/{key}/", ProductHandler) // "/products/{key}/details" s.HandleFunc("/{key}/details", ProductDetailsHandler)
URL组合:
url, err := r.Get("article").URL("category", "technology", "id", "42")
设置网站名:
r.Host("{subdomain}.domain.com")