Function's arguments

Screenshot 2020-04-23 at 16.04.45
For convenience I want to shorten AddHandler's function arguments by making a struct like that:
Screenshot 2020-04-23 at 16.12.37
and putting this struct instead of w http.ResponseWriter, r *http.Request arguments.
Everything seems okay, but how do I deal with this error?Screenshot 2020-04-23 at 16.10.25
it occurs because http.HandleFunc can only accept handler function with arguments w http.ResponseWriter, r *http.Request:
Screenshot 2020-04-23 at 16.18.41

There are a few ways you can do this:

The function you pass to AddHandler could wrap those values into a CoronavirusRelay struct and call another handler function:

type CoronavirusRelay {
    request *http.Request
    writer http.ResponseWriter
}

func myCoronavirusRelayFunc(CoronavirusRelay cr) {
    // ...
}

func main() {
    // ...
    s.AddHandler("/test", func(w http.ResponseWriter, r *http.Request) {
        myCoronavirusRelayFunc(CoronavirusRelay{request: r, writer: w})
    })
    // ...
}

If you need to do this a lot, you might want a factory function:

func CoronavirusRelayFunc(f func(cr CoronavirusRelay)) func(w http.ResponseWriter, r *http.Request) {
    return func(w http.ResponseWriter, r *http.Request) {
        f(CoronavirusRelay{reader: r, writer: w})
    }
}

func main() {
    // ...
    s.AddHandler("/test", CoronavirusRelayFunc(myCoronavirusRelayFunc))
    s.AddHandler("/test2", CoronavirusRelayFunc(myCoronavirusRelayFunc2))
    // etc ...
}