gogearbox / gearbox

Gearbox :gear: is a web framework written in Go with a focus on high performance
https://gogearbox.com
MIT License
758 stars 54 forks source link
api fasthttp framework gearbox go golang http microservice middleware performance rest router web


DeepSource

gearbox :gear: is a web framework for building micro services written in Go with a focus on high performance. It's built on fasthttp which is up to 10x faster than net/http

gearbox seeks to be

Supported Go versions & installation

:gear: gearbox requires version 1.14 or higher of Go (Download Go)

Just use go get to download and install gearbox

go get -u github.com/gogearbox/gearbox

Examples

package main

import (
    "github.com/gogearbox/gearbox"
)

func main() {
    // Setup gearbox
    gb := gearbox.New()

    // Define your handlers
    gb.Get("/hello", func(ctx gearbox.Context) {
        ctx.SendString("Hello World!")
    })

    // Start service
    gb.Start(":3000")
}

Parameters

package main

import (
    "github.com/gogearbox/gearbox"
)

func main() {
    // Setup gearbox
    gb := gearbox.New()

    // Handler with parameter
    gb.Get("/users/:user", func(ctx gearbox.Context) {
        ctx.SendString(ctx.Param("user"))
    })

    // Start service
    gb.Start(":3000")
}

Middlewares

package main

import (
    "log"

    "github.com/gogearbox/gearbox"
)

func main() {
    // Setup gearbox
    gb := gearbox.New()

    // create a logger middleware
    logMiddleware := func(ctx gearbox.Context) {
        log.Printf("log message!")

        // Next is what allows the request to continue to the next
        // middleware/handler
        ctx.Next()
    }

    // create an unauthorized middleware
    unAuthorizedMiddleware := func(ctx gearbox.Context) {
        ctx.Status(gearbox.StatusUnauthorized)
            .SendString("You are unauthorized to access this page!")
    }

    // Register the log middleware for all requests
    gb.Use(logMiddleware)

    // Define your handlers
    gb.Get("/hello", func(ctx gearbox.Context) {
        ctx.SendString("Hello World!")
    })

    // Register the routes to be used when grouping routes
    routes := []*gearbox.Route{
        gb.Get("/id", func(ctx gearbox.Context) {
            ctx.SendString("User X")
        }),
        gb.Delete("/id", func(ctx gearbox.Context) {
            ctx.SendString("Deleted")
        }),
    }

    // Group account routes
    accountRoutes := gb.Group("/account", routes)

    // Group account routes to be under api
    gb.Group("/api", accountRoutes)

    // Define a route with unAuthorizedMiddleware as the middleware
    // you can define as many middlewares as you want and have
    // the handler as the last argument
    gb.Get("/protected", unAuthorizedMiddleware, func(ctx gearbox.Context) {
        ctx.SendString("You accessed a protected page")
    })

    // Start service
    gb.Start(":3000")
}

Static Files

package main

import (
    "github.com/gogearbox/gearbox"
)

func main() {
    // Setup gearbox
    gb := gearbox.New()

    // Serve files in assets directory for prefix static
    // for example /static/gearbox.png, etc.
    gb.Static("/static", "./assets")

    // Start service
    gb.Start(":3000")
}

Benchmarks

For more results, check Our Docs

Contribute & Support

Check Our Docs for more information about gearbox and how to contribute

Sponsors

Organizations that are helping to manage, promote, and support Gearbox :gear:

trella: A B2B technology platform and trucking
marketplace that connects shippers with carriers

Who uses Gearbox

Gearbox :gear: is being used by multiple organizations including but not limited to


Contributors

Get in touch!

Feel free to chat with us on Discord, or email us at gearbox@googlegroups.com if you have questions, or suggestions

License

gearbox is licensed under MIT License

Logo is created by Mahmoud Sayed and distributed under Creative Commons License

Third-party library licenses