golang 方法作为参数传递

栗子:

import "fmt"
import "time"

func goFunc1(f func()) {
        go f() 
}

func goFunc2(f func(interface{}), i interface{}) {
        go f(i)
}

func goFunc(f interface{}, args... interface{}) {
        if len(args) > 1 { 
                go f.(func(...interface{}))(args)
        } else if len(args) == 1 { 
                go f.(func(interface{}))(args[0])
        } else {
                go f.(func())()
        }   
}

func f1() {
        fmt.Println("f1 done")
}

func f2(i interface{}) {
        fmt.Println("f2 done", i)
}

func f3(args... interface{}) {
        fmt.Println("f3 done", args)
}

func main() {
        goFunc1(f1)
        goFunc2(f2, 100)
        
        goFunc(f1)
        goFunc(f2, "xxxx")
        goFunc(f3, "hello", "world", 1, 3.14)
        time.Sleep(5 * time.Second)
}

f1 done

f2 done 100

f1 done

f2 done xxxx

f3 done [[hello world 1 3.14]]

转自 http://blog.csdn.net/eclipser1987/article/details/11772539

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,653评论 25 709
  • 1.1==,is的使用 ·is是比较两个引用是否指向了同一个对象(引用比较)。 ·==是比较两个对象是否相等。 1...
    TENG书阅读 4,037评论 0 0
  • 在此特此声明:一下所有链接均来自互联网,在此记录下我的查阅学习历程,感谢各位原创作者的无私奉献 ! 技术一点一点积...
    远航的移动开发历程阅读 13,879评论 12 197
  • 1.作为一个小白,花费千辛万苦终于知道Ijk如何使用,这里分享给跟我一样小白的人.我们直接进入正题(这里导入的是官...
    WeakRefrence阅读 9,925评论 0 3
  • 我居然成了上床就能睡着的人,最近没珍惜身体啊。虽然很困,但好像有什么东西在拼命的拉着我,总觉得缺了什么就睡觉了,我...
    章鱼猎人阅读 1,547评论 0 1