douyi1963 2012-09-29 18:45 采纳率: 0%
浏览 139
已采纳

可以在Go中将函数作为参数传递吗?

In Java I can do something like

derp(new Runnable { public void run () { /* run this sometime later */ } })

and "run" the code in the method later. It's a pain to handle (anonymous inner class), but it can be done.

Does Go have something that can facilitate a function/callback being passed in as a parameter?

  • 写回答

6条回答 默认 最新

  • dqq3623 2012-09-29 19:18
    关注

    Yes, consider some of these examples:

    package main
    
    import "fmt"
    
    // convert types take an int and return a string value.
    type convert func(int) string
    
    // value implements convert, returning x as string.
    func value(x int) string {
        return fmt.Sprintf("%v", x)
    }
    
    // quote123 passes 123 to convert func and returns quoted string.
    func quote123(fn convert) string {
        return fmt.Sprintf("%q", fn(123))
    }
    
    func main() {
        var result string
    
        result = value(123)
        fmt.Println(result)
        // Output: 123
    
        result = quote123(value)
        fmt.Println(result)
        // Output: "123"
    
        result = quote123(func(x int) string { return fmt.Sprintf("%b", x) })
        fmt.Println(result)
        // Output: "1111011"
    
        foo := func(x int) string { return "foo" }
        result = quote123(foo)
        fmt.Println(result)
        // Output: "foo"
    
        _ = convert(foo) // confirm foo satisfies convert at runtime
    
        // fails due to argument type
        // _ = convert(func(x float64) string { return "" })
    }
    

    Play: http://play.golang.org/p/XNMtrDUDS0

    Tour: https://tour.golang.org/moretypes/25 (Function Closures)

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(5条)

报告相同问题?

悬赏问题

  • ¥15 关于#MATLAB#的问题,如何解决?(相关搜索:信噪比,系统容量)
  • ¥500 52810做蓝牙接受端
  • ¥15 基于PLC的三轴机械手程序
  • ¥15 多址通信方式的抗噪声性能和系统容量对比
  • ¥15 winform的chart曲线生成时有凸起
  • ¥15 msix packaging tool打包问题
  • ¥15 finalshell节点的搭建代码和那个端口代码教程
  • ¥15 Centos / PETSc / PETGEM
  • ¥15 centos7.9 IPv6端口telnet和端口监控问题
  • ¥20 完全没有学习过GAN,看了CSDN的一篇文章,里面有代码但是完全不知道如何操作