🔗 HTTP router based on radix trees. 17 Commits
2023-09-01 12:43:36 +02:00
2024-03-13 13:04:03 +01:00
2024-03-14 23:26:59 +01:00
2023-09-01 12:43:36 +02:00
2024-03-14 23:26:59 +01:00
2024-03-14 23:26:59 +01:00
2024-03-14 23:26:59 +01:00
2024-03-14 23:26:59 +01:00
2024-03-14 23:26:59 +01:00

router

HTTP router based on radix trees.

Features

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

Installation

go get git.akyoto.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: 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            200621386                5.963 ns/op           0 B/op          0 allocs/op
BenchmarkBlog/Len1-Param1-12            129550375                9.224 ns/op           0 B/op          0 allocs/op
BenchmarkGitHub/Len7-Param0-12          70562060                16.98 ns/op            0 B/op          0 allocs/op
BenchmarkGitHub/Len7-Param1-12          49366180                22.56 ns/op            0 B/op          0 allocs/op
BenchmarkGitHub/Len7-Param2-12          24332162                47.91 ns/op            0 B/op          0 allocs/op

License

Please see the license documentation.

© 2023 Eduard Urbach