🔗 HTTP router based on radix trees.
Find a file
Eduard Urbach c10e38fec9
All checks were successful
/ test (push) Successful in 14s
Updated dependencies
2025-06-06 17:13:01 +02:00
testdata Updated formatting 2025-06-06 17:08:12 +02:00
.gitignore Updated formatting 2025-06-06 17:08:12 +02:00
bench_test.go Renamed files 2025-06-06 17:09:28 +02:00
flow.go Updated formatting 2025-06-06 17:08:12 +02:00
go.mod Updated dependencies 2025-06-06 17:13:01 +02:00
go.sum Updated dependencies 2025-06-06 17:13:01 +02:00
Parameter.go Updated formatting 2025-06-06 17:08:12 +02:00
readme.md Renamed files 2025-06-06 17:09:28 +02:00
Router.go Updated formatting 2025-06-06 17:08:12 +02:00
Router_test.go Updated formatting 2025-06-06 17:08:12 +02:00
Tree.go Updated formatting 2025-06-06 17:08:12 +02:00
treeNode.go Updated formatting 2025-06-06 17:08:12 +02:00

router

HTTP router based on radix trees.

Features

  • Efficient lookup
  • Generic data structure
  • Zero dependencies (excluding tests)

Installation

go get git.urbach.dev/go/router

Usage

router := router.New[string]()

// Static routes
router.Add("GET", "/hello", "...")
router.Add("GET", "/world", "...")

// Parameter routes
router.Add("GET", "/users/:id", "...")
router.Add("GET", "/users/:id/comments", "...")

// Wildcard routes
router.Add("GET", "/images/*path", "...")

// Simple lookup
data, params := router.Lookup("GET", "/users/42")
fmt.Println(data, params)

// Efficient lookup
data := router.LookupNoAlloc("GET", "/users/42", func(key string, value string) {
	fmt.Println(key, value)
})

Tests

PASS: TestStatic
PASS: TestParameter
PASS: TestMixed
PASS: TestWildcard
PASS: TestMap
PASS: TestMethods
PASS: TestGitHub
PASS: TestTrailingSlash
PASS: TestTrailingSlashOverwrite
PASS: TestOverwrite
PASS: TestInvalidMethod
coverage: 100.0% of statements

Benchmarks

BenchmarkBlog/Len1-Param0-12            211814850                5.646 ns/op           0 B/op          0 allocs/op
BenchmarkBlog/Len1-Param1-12            132838722                8.978 ns/op           0 B/op          0 allocs/op
BenchmarkGitHub/Len7-Param0-12          84768382                14.14 ns/op            0 B/op          0 allocs/op
BenchmarkGitHub/Len7-Param1-12          55290044                20.74 ns/op            0 B/op          0 allocs/op
BenchmarkGitHub/Len7-Param2-12          26057244                46.08 ns/op            0 B/op          0 allocs/op

License

Please see the license documentation.

© 2023 Eduard Urbach