82 lines
2.5 KiB
Markdown
82 lines
2.5 KiB
Markdown
|
bone [![GoDoc](https://godoc.org/github.com/squiidz/bone?status.png)](http://godoc.org/github.com/go-zoo/bone) [![Build Status](https://travis-ci.org/go-zoo/bone.svg)](https://travis-ci.org/go-zoo/bone) [![Go Report Card](https://goreportcard.com/badge/go-zoo/bone)](https://goreportcard.com/report/go-zoo/bone) [![Sourcegraph](https://sourcegraph.com/github.com/go-zoo/bone/-/badge.svg)](https://sourcegraph.com/github.com/go-zoo/bone?badge)
|
||
|
=======
|
||
|
|
||
|
## What is bone ?
|
||
|
|
||
|
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` and `http.HandlerFunc`
|
||
|
- Custom NotFound handler
|
||
|
- Respect the Go standard `http.Handler` interface
|
||
|
|
||
|
![alt tag](https://c2.staticflickr.com/2/1070/540747396_5542b42cca_z.jpg)
|
||
|
|
||
|
## Speed
|
||
|
|
||
|
```
|
||
|
- 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.
|
||
|
|
||
|
## Example
|
||
|
|
||
|
``` go
|
||
|
|
||
|
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))
|
||
|
}
|
||
|
|
||
|
```
|
||
|
|
||
|
## Blog Posts
|
||
|
- http://www.peterbe.com/plog/my-favorite-go-multiplexer
|
||
|
- https://harshladha.xyz/my-first-library-in-go-language-hasty-791b8e2b9e69
|
||
|
|
||
|
## Libs
|
||
|
- Errors dump for Go : [Trash](https://github.com/go-zoo/trash)
|
||
|
- Middleware Chaining module : [Claw](https://github.com/go-zoo/claw)
|