GitHub - gernest/alien: A lightweight and fast http router from outer space (original) (raw)
Alien is a lightweight http router( multiplexer) for Go( Golang ), made for humans who don't like magic.
Documentation docs
Features
- fast ( see the benchmarks, or run them yourself)
- lightweight ( just a single file read all of it in less than a minute)
- safe( designed with concurrency in mind)
- middleware support.
- routes groups
- no external dependency( only the standard library )
Motivation
I wanted a simple, fast, and lightweight router that has no unnecessary overhead using the standard library only, following good practices and well tested code( Over 90% coverage)
Installation
go get github.com/gernest/alien
Usage
normal static routes
package main
import ( "log" "net/http"
"github.com/gernest/alien")
func main() { m := alien.New() m.Get("/", func(w http.ResponseWriter, r *http.Request) { w.Write([]byte("hello world")) }) log.Fatal(http.ListenAndServe(":8090", m)) }
visiting your localhost at path / will print hello world
named params
package main
import ( "log" "net/http"
"github.com/gernest/alien")
func main() { m := alien.New() m.Get("/hello/:name", func(w http.ResponseWriter, r *http.Request) { p := alien.GetParams(r) w.Write([]byte(p.Get("name"))) }) log.Fatal(http.ListenAndServe(":8090", m)) }
visiting your localhost at path /hello/tanzania will print tanzania
catch all params
package main
import ( "log" "net/http"
"github.com/gernest/alien")
func main() { m := alien.New() m.Get("/hello/*name", func(w http.ResponseWriter, r *http.Request) { p := alien.GetParams(r) w.Write([]byte(p.Get("name"))) }) log.Fatal(http.ListenAndServe(":8090", m)) }
visiting your localhost at path /hello/my/margicl/sheeplike/ship will printmy/margical/sheeplike/ship
middlewares
Middlewares are anything that satisfy the interfacefunc(http.Handler)http.Handler . Meaning you have thousands of middlewares at your disposal, you can use middlewares from many golang http frameworks on alien(most support the interface).
package main
import ( "log" "net/http"
"github.com/gernest/alien")
func middleware(h http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { w.Write([]byte("hello middlware")) }) }
func main() { m := alien.New() m.Use(middleware) m.Get("/", func(_ http.ResponseWriter, _ *http.Request) { }) log.Fatal(http.ListenAndServe(":8090", m)) }
visiting your localhost at path / will print hello middleware
groups
You can group routes
package main
import ( "log" "net/http"
"github.com/gernest/alien")
func main() { m := alien.New() g := m.Group("/home") m.Use(middleware) g.Get("/alone", func(w http.ResponseWriter, _ *http.Request) { w.Write([]byte("home alone")) }) log.Fatal(http.ListenAndServe(":8090", m)) }
visiting your localhost at path /home/alone will print home alone
Contributing
Start with clicking the star button to make the author and his neighbors happy. Then fork the repository and submit a pull request for whatever change you want to be added to this project.
If you have any questions, just open an issue.
Author
Geofrey Ernest @gernesti on twitter
Licence
MIT see LICENSE