# 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