type ServeMux func NewServeMux() *ServeMux func (mux *ServeMux) Handle(pattern string, handler Handler) func (mux *ServeMux) HandleFunc(pattern string, handler func(ResponseWriter, *Request)) func (mux *ServeMux) Handler(r *Request) (h Handler, pattern string) func (mux *ServeMux) ServeHTTP(w ResponseWriter, r *Request)最简单的 Demo 如下:
type apiHandler struct{} func (apiHandler) ServeHTTP(http.ResponseWriter, *http.Request) {} func main() { mux := http.NewServeMux() mux.Handle("/api/", apiHandler{}) mux.HandleFunc("/", func(w http.ResponseWriter, req *http.Request) { ... fmt.Fprintf(w, "你好,堆代码!) }) }用法非常的简单和标准,就是路径和实现方法。
mux.HandleFunc("POST /eddycjy/create", func(w http.ResponseWriter, r *http.Request) { fmt.Fprint(w, "堆代码 duidaima.com!") }) mux.HandleFunc("GET /eddycjy/update", func(w http.ResponseWriter, r *http.Request) { fmt.Fprint(w, "堆代码 duidaima.com...") }) ...
mux.HandleFunc("/eddycjy/{id}", func(w http.ResponseWriter, r *http.Request) { id := r.PathValue("id") fmt.Fprintf(w, "id 值为 %s", id) }) mux.HandleFunc("/eddycjy/{path...}", func(w http.ResponseWriter, r *http.Request) { path := r.PathValue("path") fmt.Fprintf(w, "path 值为 %s", path) }) ...
/b/{bucket}/o/default 比 /b/{bucket}/o/{noun} 更具体,因为第一个仅匹配第四个元素是文字 “default” 的路径,而在第二个中,第四个元素可以是任何内容。
今天我们分享了 Go1.22 对于 net/http 标注库中的 ServerMux 路由相关功能的增强。Go 还是有在吸收第三方开源库的一些不错的地方的,就是慢了一些。这都 10 多年了...
参考资料
[1]net/http: enhanced ServeMux routing: https://github.com/golang/go/issues/61410