Popularity
3.9
Growing
Activity
0.0
Stable
107
4
9

Programming language: Go
Tags: Web Frameworks    
Latest version: v0.1.0

alien alternatives and similar packages

Based on the "Web Frameworks" category

Do you think we are missing an alternative of alien or a related project?

Add another 'Web Frameworks' Package

README

Alien Coverage Status Build Status GoDoc Go Report Card

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](alien.go) 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 print my/margical/sheeplike/ship

middlewares

Middlewares are anything that satisfy the interface func(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](LICENSE)


*Note that all licence references and agreements mentioned in the alien README section above are relevant to that project's source code only.