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 winform的chart曲线生成时有凸起
  • ¥15 msix packaging tool打包问题
  • ¥15 finalshell节点的搭建代码和那个端口代码教程
  • ¥15 用hfss做微带贴片阵列天线的时候分析设置有问题
  • ¥15 Centos / PETSc / PETGEM
  • ¥15 centos7.9 IPv6端口telnet和端口监控问题
  • ¥20 完全没有学习过GAN,看了CSDN的一篇文章,里面有代码但是完全不知道如何操作
  • ¥15 使用ue5插件narrative时如何切换关卡也保存叙事任务记录
  • ¥20 海浪数据 南海地区海况数据,波浪数据