dongshi1424 2017-06-15 21:21
浏览 630
已采纳

golang将func作为参数传递给另一个func

Main question is "is it possible to pass any type func as param and how?". I am learning Go and want to make my own async wrap function like this:

func AsyncFunc(fn func(), args ...interface{}) chan bool {
    var done chan bool;

    go func() {
        fn(args...);
        done <- true;
    }();

    return done;
}

and call it:

max := func(a, b int) int {
    //some hard code what will be goroutine
    if a > b {return a};
    return b;
}

done := AsyncFunc(max, 5, 8);
//some pretty code
<- done;

P.S. sorry for my English if it is bad...

Edit1: I know it is useless, slow and danger. It is just my crazy idea what i want just realise.

  • 写回答

2条回答 默认 最新

  • douyanqu9722 2017-10-07 18:34
    关注

    i found the way to do what i want.

     package main
    
    
     import (
         "fmt"
     )
    
    
     func t1(t int) {
         fmt.Printf("%d
    ", t);
     }
    
    
     func t2(t string) {
         fmt.Printf("%s
    ", t);
     }
    
    
     func test(fn interface{}, data interface{}) {
         switch fn.(type) {
         case func(string):
             fn.(func(string))(data.(string))
         case func(int):
             fn.(func(int))(data.(int))
         }
     }
    
    
     func main() {
         test(t1, 123);
         test(t2, "test");
     }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败
  • ¥15 计组这些题应该咋做呀
  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?
  • ¥15 让node服务器有自动加载文件的功能
  • ¥15 jmeter脚本回放有的是对的有的是错的
  • ¥15 r语言蛋白组学相关问题