Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/go-zoo/bone
Lightning Fast HTTP Multiplexer
https://github.com/go-zoo/bone
go mux router
Last synced: 22 days ago
JSON representation
Lightning Fast HTTP Multiplexer
- Host: GitHub
- URL: https://github.com/go-zoo/bone
- Owner: go-zoo
- License: mit
- Created: 2014-11-19T02:16:36.000Z (almost 10 years ago)
- Default Branch: master
- Last Pushed: 2019-05-06T14:37:24.000Z (over 5 years ago)
- Last Synced: 2024-10-01T11:43:14.396Z (about 1 month ago)
- Topics: go, mux, router
- Language: Go
- Homepage: http://go-zoo.github.io/bone
- Size: 2.4 MB
- Stars: 1,289
- Watchers: 37
- Forks: 102
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
- Code of conduct: CODE_OF_CONDUCT.md
Awesome Lists containing this project
- awesome-go - bone - Lightning Fast HTTP Multiplexer (Multiplexers)
- awesome-go - Bone - Lightning Fast HTTP Multiplexer. Stars:`1.3K`. (Web Frameworks / Routers)
- awesome-go - bone - Lightning Fast HTTP Multiplexer - ★ 1170 (Web Frameworks)
- awesome-go-extra - bone - 11-19T02:16:36Z|2019-05-06T14:37:24Z| (Web Frameworks / Routers)
README
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)
=======## What is bone ?
Bone is a lightweight and lightning fast HTTP Multiplexer for Golang. It support :
- URL Parameters
- REGEX Parameters
- Wildcard routes
- Router Prefix
- Route params validators
- 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 tests are just for fun, all these routers are great and efficient.
Bone isn't the fastest router for every job.## Example
``` go
package main
import(
"net/http""github.com/go-zoo/bone"
)func main () {
mux := bone.New()mux.RegisterValidatorFunc("isNum", func(s string) bool {
if _, err := strconv.Atoi(s); err == nil {
return true
}
return false
})// mux.Get, Post, etc ... takes http.Handler
// validator for route parameter
mux.Get("/home/:id|isNum", http.HandlerFunc(HomeHandler))
// multiple parameter
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)