I want to pass a function as a parameter in a go function. Here is my code:
func Call(path string, method func()) {
// TODO launch the method here
}
When I want to call this function, I want to do this:
func routes() {
app.Call("/", controllers.Index())
}
And the Index()
method is:
func Index(res http.ResponseWriter, req http.Request) {
userAgent := req.Header.Get("User-Agent")
fmt.Fprintf(res, "You're User-Agent is %s", userAgent)
}
Is a good idea to create a type
and pass this type
as parameter ?
It's entirely up to you if you create a named type. Technically you are defining a type even if you do it anonymously in the signature (the type is func()
in your code). Whether or not it needs to be defined with a name is up to you and depends on your use case and needs.
Whether or not you define a named type, the function signatures must match (you can't pass a func(http.ResponseWriter, http.Request)
to a func()
argument), and you have to pass the function rather than calling it and passing its return value (which it does not have):
// Correct arguments required
func Call(path string, method func(http.ResponseWriter, http.Request)) {
// TODO launch the method here
}
func routes() {
// Index() calls the function, you just want to pass a reference to it
app.Call("/", controllers.Index)
}