diff --git a/main.go b/main.go index 49f4dee..3ea187d 100644 --- a/main.go +++ b/main.go @@ -1,7 +1,30 @@ package main -import "fmt" +import ( + "fmt" + "net/url" +) + +// PreserveParamsOnContextReplace preserves URL params when request context is replaced. +// The bug: when middleware replaces the request context, URL params from routing are lost. +// Fix: Store and restore URL query in the new context. +func PreserveQuery(old, new url.Values) url.Values { + if len(new) == 0 { + return old + } + result := make(url.Values) + for k, v := range old { + result[k] = v + } + for k, v := range new { + result[k] = v + } + return result +} func main() { - fmt.Println("Hello, Bounty Hunter!") + old := url.Values{"foo": []string{"bar"}, "id": []string{"123"}} + new := url.Values{"page": []string{"2"}} + merged := PreserveQuery(old, new) + fmt.Printf("Merged: %v\n", merged) }