For convenience I want to shorten AddHandler
's function arguments by making a struct like that:
and putting this struct instead of w http.ResponseWriter, r *http.Request
arguments.
Everything seems okay, but how do I deal with this error?
it occurs because http.HandleFunc
can only accept handler function with arguments w http.ResponseWriter, r *http.Request
:
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 ...
}