doubei2340 2018-10-25 13:02
浏览 263
已采纳

在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 ?

  • 写回答

1条回答 默认 最新

  • doulu3808 2018-10-25 13:09
    关注

    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)
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 逻辑谓词和消解原理的运用
  • ¥15 三菱伺服电机按启动按钮有使能但不动作
  • ¥15 js,页面2返回页面1时定位进入的设备
  • ¥200 关于#c++#的问题,请各位专家解答!网站的邀请码
  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号