https://github.com/themisir/gosnail
Yet another go http router. But this one doesn't focuses on performance. Rather it focuses on developer experience.
https://github.com/themisir/gosnail
go-router golang http-routing
Last synced: 8 months ago
JSON representation
Yet another go http router. But this one doesn't focuses on performance. Rather it focuses on developer experience.
- Host: GitHub
- URL: https://github.com/themisir/gosnail
- Owner: themisir
- Created: 2021-08-07T20:27:45.000Z (almost 5 years ago)
- Default Branch: main
- Last Pushed: 2021-08-07T22:19:20.000Z (almost 5 years ago)
- Last Synced: 2025-09-24T13:45:16.317Z (9 months ago)
- Topics: go-router, golang, http-routing
- Language: Go
- Homepage:
- Size: 15.6 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# 🐌 GoSnail
Experimental express.js like HTTP router written in golang. This project was
just a demostration to check whether or not we could create "developer friendly"
API for http routing.
## What does it look like?
Take a look at this sample code..
```go
import (
"fmt"
"gosnail"
)
func main() {
// Router handles incoming requests from Application or another routers
router := gosnail.NewRouter()
// Application is wrapper for http.Handler that composes and redirects
// requests to router
app := gosnail.NewApplication(router)
// Simple GET / request handler
//
// Arguments:
// ctx - is request context contains request and response details
// next - calling this function fill forward request to the next handler
router.Get("/", func (ctx *gosnail.Context, next func()) {
fmt.Fprintf(ctx.Response(), "Index page")
})
// Middleware that handles all requests (excluding previously handled ones)
//
// Middlewares are simple functions that can intercept request and response
// data and has ability to modifying them.
//
// In this example middleware, it simply checks if the request has an header
// named 'Authorization', if not it simply responds with 401 status code. If
// there's one, it forwards request to next handler.
router.Use(gosnail.Any, func (ctx *gosnail.Context, next func()) {
if ctx.Request().Headers.Get("Authorization") != "" {
ctx.Response().StatusCode = 401
ctx.Response().End()
} else {
next()
}
})
// Another simple GET /users handler.
//
// This handler will get called only if previously registered middleware
// forwards request to it.
router.Get("/users", func (ctx *gosnail.Context, next func()) {
fmt.Fprintf(ctx.Response(), "This is supposed to be user list...")
})
// Creates http server that listens for incoming requests to port 8080 and
// forwards them to the router.
//
// This method has same effect as calling http.ListenAndServe(":8080", app)
app.Listen(":8080")
}
```
## Why?
Because current state of routing libraries in golang is not much friendly for
newcomer developers to golang coming from much simplier environments like
node.js. Bla blah... To be honest, I was just bored and tried to do something
for fun.
**It's not likely that I'm going to continue to work on this repository. So
please don't use it.**
Also if you read this far, I wanna let you know that I hate golang's module /
package management system, and that's what frustrated me a lot during making of
this package. That's it, thanks for coming to my TED talk.