Bone is a lightweight and lightning fast HTTP Multiplexer for Golang. It support :
- URL Parameters
- REGEX Parameters
- Wildcard routes
- Router Prefix
- Sub Router,
mux.SubRoute()
, support most standard router (bone, gorilla/mux, httpRouter etc...) - Http method declaration
- Support for
http.Handler
andhttp.HandlerFunc
- Custom NotFound handler
- Respect the Go standard
http.Handler
interface
- BenchmarkBoneMux 10000000 118 ns/op
- BenchmarkZeusMux 100000 144 ns/op
- BenchmarkHttpRouterMux 10000000 134 ns/op
- BenchmarkNetHttpMux 3000000 580 ns/op
- BenchmarkGorillaMux 300000 3333 ns/op
- BenchmarkGorillaPatMux 1000000 1889 ns/op
These test are just for fun, all these router are great and really efficient. Bone do not pretend to be the fastest router for every job.
package main
import(
"net/http"
"github.com/go-zoo/bone"
)
func main () {
mux := bone.New()
// mux.Get, Post, etc ... takes http.Handler
mux.Get("/home/:id", http.HandlerFunc(HomeHandler))
mux.Get("/profil/:id/:var", http.HandlerFunc(ProfilHandler))
mux.Post("/data", http.HandlerFunc(DataHandler))
// Support REGEX Route params
mux.Get("/index/#id^[0-9]$", http.HandlerFunc(IndexHandler))
// Handle take http.Handler
mux.Handle("/", http.HandlerFunc(RootHandler))
// GetFunc, PostFunc etc ... takes http.HandlerFunc
mux.GetFunc("/test", Handler)
http.ListenAndServe(":8080", mux)
}
func Handler(rw http.ResponseWriter, req *http.Request) {
// Get the value of the "id" parameters.
val := bone.GetValue(req, "id")
rw.Write([]byte(val))
}