75 lines
1.6 KiB
Markdown

# router
HTTP router based on radix trees.
## Features
- Efficient lookup
- Generic data structure
- Zero dependencies (excluding tests)
## Installation
```shell
go get git.akyoto.dev/go/router
```
## Usage
```go
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: TestOverwrite
PASS: TestInvalidMethod
coverage: 99.1% of statements
```
## Benchmarks
```
BenchmarkBlog/Len1-Param0-12 182590244 6.57 ns/op 0 B/op 0 allocs/op
BenchmarkBlog/Len1-Param1-12 100000000 10.95 ns/op 0 B/op 0 allocs/op
BenchmarkGitHub/Len7-Param0-12 67053636 17.95 ns/op 0 B/op 0 allocs/op
BenchmarkGitHub/Len7-Param1-12 49371550 24.12 ns/op 0 B/op 0 allocs/op
BenchmarkGitHub/Len7-Param2-12 24562465 48.83 ns/op 0 B/op 0 allocs/op
```
## License
Please see the [license documentation](https://akyoto.dev/license).
## Copyright
© 2023 Eduard Urbach