76 lines
1.7 KiB
Markdown
76 lines
1.7 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: 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](https://akyoto.dev/license).
|
|
|
|
## Copyright
|
|
|
|
© 2023 Eduard Urbach
|