Categorygithub.com/vadymbarabanov/router
repositorypackage
0.0.0-20250120084930-125b1e7c2cca
Repository: https://github.com/vadymbarabanov/router.git
Documentation: pkg.go.dev

# README

router

Simple golang http router with middlewares

Features

Usage

Middleware

package main

import (
	"net/http"
	rt "github.com/vadymbarabanov/router"
)

func main() {
	router := rt.NewRouter()

	router.Use(func(next http.HandlerFunc) http.HandlerFunc {
		return func(w http.ResponseWriter, r *http.Request) {
			log.Printf("%s %s %s", r.Method, r.Proto, r.URL.Path)
			next(w, r)
		}
	})

	router.HandleFunc("GET /hello", func(w http.ResponseWriter, r *http.Request) {
		w.Write([]byte("world!"))
	})

	http.ListenAndServe(":4000", router.Mux())
}

Group

package main

import (
	"net/http"
	rt "github.com/vadymbarabanov/router"
)

func main() {
	router := rt.NewRouter()

	router.Group(func(g *rt.Router) {
		g.Use(customGroupMiddleware) // group scoped middleware

		g.HandleFunc("GET /group-route", func(w http.ResponseWriter, r *http.Request) { /* ... */ })

		g.Group(func(g *rt.Router) { /* ... */ }) // nested groups
	})

	http.ListenAndServe(":4000", router.Mux())
}

Sub-router

package main

import (
	"net/http"
	rt "github.com/vadymbarabanov/router"
)

func main() {
	router := rt.NewRouter()

	router.HandleFunc("GET /hello", func(w http.ResponseWriter, r *http.Request) {
		w.Write([]byte("world!"))
	})

	protectedRouter := rt.NewRouter()
	protectedRouter.Use(authMiddleware)

	protectedRouter.HandleFunc("GET /profile", func(w http.ResponseWriter, r *http.Request) {
		// ...
	})

	router.Mount(protectedRouter)

	http.ListenAndServe(":4000", router.Mux())
}