Передать функцию в качестве параметра в функции go - PullRequest
0 голосов
/ 25 октября 2018

Я хочу передать функцию в качестве параметра в функции go.Вот мой код:

func Call(path string, method func()) {
    // TODO launch the method here
}

Когда я хочу вызвать эту функцию, я хочу сделать это:

func routes() {
    app.Call("/", controllers.Index())
}

И метод Index():

func Index(res http.ResponseWriter, req http.Request) {
    userAgent := req.Header.Get("User-Agent")
    fmt.Fprintf(res, "You're User-Agent is %s", userAgent)
}

Является ли хорошей идеей создать type и передать этот type в качестве параметра?

1 Ответ

0 голосов
/ 25 октября 2018

Это полностью зависит от вас, если вы создаете именованный тип.Технически вы определяете тип, даже если вы делаете это анонимно в подписи (в вашем коде тип func()).Должно ли оно быть определено с помощью имени, зависит от вас и зависит от вашего варианта использования и потребностей.

Независимо от того, определяете ли вы именованный тип или нет, сигнатуры функций должны совпадать (вы не можете передатьfunc(http.ResponseWriter, http.Request) в func() аргумент), и вы должны передать функцию вместо ее вызова и передачи возвращаемого значения (которого у него нет):

// 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)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...