# 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 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