Improved route order flexibility

This commit is contained in:
2023-07-10 14:48:28 +02:00
parent 9676708199
commit 46e1f07d6c
4 changed files with 99 additions and 5 deletions

View File

@ -2,9 +2,11 @@
HTTP router based on radix trees.
## Example
## Usage
We can save any type of data inside the router. Here is an example storing strings for each route:
### Static
We can save any type of data inside the router. Here is an example storing strings for static routes:
```go
router := router.New[string]()
@ -13,11 +15,34 @@ router.Add("GET", "/hello", "Hello")
router.Add("GET", "/world", "World")
```
### Parameters
The router supports parameters:
```go
router.Add("GET", "/users/:id", "...")
router.Add("GET", "/users/:id/comments", "...")
```
### Wildcards
The router can also fall back to a catch-all route which is useful for file servers:
```go
router.Add("GET", "/images/*path", "...")
```
## Benchmarks
Requesting every single route in [github.txt](testdata/github.txt):
Requesting every single route in [github.txt](testdata/github.txt) (≈200 requests) in each iteration:
```
BenchmarkLookup-12 33210 36134 ns/op 19488 B/op 337 allocs/op
BenchmarkLookupNoAlloc-12 103437 11331 ns/op 0 B/op 0 allocs/op
```
```
## Embedding
If you'd like to embed this router into your own framework, please use `LookupNoAlloc` because it's much faster than `Lookup`.
To build an http server you would of course store request handlers (functions), not strings.