在go函数中将函数作为参数传递

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)
}