Package mux implements an HTTP request multiplexer.
- Middleware
- Group
- Path matching and routing
- Fully compatible with the http.HandlerFunc
- Not found
- Recovery
- HTTP Handler
go get github.com/hslam/mux
import "github.com/hslam/mux"
package main
import (
"github.com/hslam/mux"
"log"
"net/http"
)
func main() {
m := mux.New()
m.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("Hello World"))
})
log.Fatal(http.ListenAndServe(":8080", m))
}
package main
import (
"fmt"
"github.com/hslam/mux"
"log"
"net/http"
)
func main() {
m := mux.New()
m.Recovery(mux.Recovery)
m.NotFound(func(w http.ResponseWriter, r *http.Request) {
http.Error(w, "Not Found : "+r.URL.String(), http.StatusNotFound)
})
m.Use(func(w http.ResponseWriter, r *http.Request) {
fmt.Printf("Host:%s Path:%s Method:%s\n", r.Host, r.URL.Path, r.Method)
})
m.HandleFunc("/hello", func(w http.ResponseWriter, r *http.Request) {
w.Write([]byte(fmt.Sprintf("hello world Method:%s\n", r.Method)))
}).All()
m.HandleFunc("/hello/:key/world/:value", func(w http.ResponseWriter, r *http.Request) {
params := m.Params(r)
w.Write([]byte(fmt.Sprintf("hello key:%s value:%s\n", params["key"], params["value"])))
}).GET().POST().PUT().DELETE()
m.Group("/group", func(m *mux.Mux) {
m.HandleFunc("/foo/:id", func(w http.ResponseWriter, r *http.Request) {
params := m.Params(r)
w.Write([]byte(fmt.Sprintf("group/foo id:%s\n", params["id"])))
}).GET()
m.HandleFunc("/bar/:id", func(w http.ResponseWriter, r *http.Request) {
params := m.Params(r)
w.Write([]byte(fmt.Sprintf("group/bar id:%s\n", params["id"])))
}).GET()
})
log.Fatal(http.ListenAndServe(":8080", m))
}
curl -XGET https://localhost:8080/favicon.ico
Not Found : /favicon.ico
curl -XGET https://localhost:8080/hello
hello world Method:GET
curl -XPOST https://localhost:8080/hello
hello world Method:POST
curl -I https://localhost:8080/hello
HTTP/1.1 200 OK
Date: Tue, 01 Oct 2019 20:28:42 GMT
Content-Length: 24
Content-Type: text/plain; charset=utf-8
curl -XPATCH https://localhost:8080/hello
hello world Method:PATCH
curl -XOPTIONS https://localhost:8080/hello
hello world Method:OPTIONS
curl https://localhost:8080/hello/123/world/456
hello key:123 value:456
curl https://localhost:8080/group/foo/1
group/foo id:1
curl https://localhost:8080/group/bar/2
group/bar id:2
This package is licensed under a MIT license (Copyright (c) 2019 Meng Huang)
mux was written by Meng Huang.