No description
Find a file
2026-01-04 18:05:07 +08:00
.github/workflows chore(github): setup go test workflow 2025-12-02 17:24:43 +08:00
.gitignore chore(git): ignore main.go, which is for local testing 2025-12-03 15:07:54 +08:00
context.go feat: provide basic data getters 2025-12-03 16:10:50 +08:00
context_test.go style: run gofmt 2025-12-04 12:06:12 +08:00
engine.go feat: provide basic data getters 2025-12-03 16:10:50 +08:00
engine_test.go refactor: use standard Go tests 2025-11-27 11:45:00 +08:00
go.mod fix: module path 2026-01-04 18:05:07 +08:00
group.go style: run gofmt and remove pointless comments 2025-12-03 14:47:01 +08:00
group_test.go test: netsted group 2025-12-03 14:49:52 +08:00
LICENSE docs: add MIT License 2025-11-27 12:03:27 +08:00
logger.go chore: add a logger 2025-12-09 11:26:31 +08:00
README.md docs: update roadmap 2025-12-12 14:34:46 +08:00
router.go refactor: use vanilla URL.Query() instead of a custom parser 2025-12-03 15:36:29 +08:00
router_test.go test: clean up after 264ab71801 2025-12-03 15:48:37 +08:00
types.go feat: provide basic data getters 2025-12-03 16:10:50 +08:00

Growel

Minimal, headless, zero-dependency Web framework written in Go. This is toy software I develop to learn, so do not use in production.

Usage

e := growel.New()

e.GET("/hello", func(c *growel.Context) {
	c.JSON(200, map[string]string{
		"message": "Hello, Growel!"
	})
})

e.Group("/api", func(api *growel.Group) {
	api.Group("/user", func(user *growel.Group) {
		user.GET("/", func(c *growel.Context) {
			c.JSON(200, Users)
		})

		user.GET("/:uid", func(c *growel.Context) {
			uid, err := strconv.Atoi(c.Params["uid"])
			if err != nil {
				c.BadRequest("Invalid user ID")
				return
			}

			for _, user := range Users {
				if user.ID == uid {
					c.JSON(200, user)
					return
				}
			}

			c.NotFound("User not found")
		})
	})
})

Roadmap

  • Authorization with token
  • Panic recovery
  • CORS support
  • Custom 404 handler
  • Context.Redirect()
  • File Upload
  • Serve static files
  • Engine.shutdown()
  • TLS
  • Wildcard routing *
  • Parameter type support, ParamInt() ParamString()