go函数作为参数传递

package main

import (
    "fmt"
    "time"
)

// 无参函数
func f1() {
    fmt.Println("--> in func f1")
    fmt.Println("-->(f1) f1 node")
}

// 调用例子
func goFunc1(f func()) {
    go f()
}

// 有定长参数的函数
func f2(i interface{}) {
    fmt.Println("--> in func f2")
    fmt.Println("-->(f2) f2 node", i)
}

// 调用例子
func goFunc2(f func(interface{}), i interface{}) {
    go f(i)
}

// 有变长参数的函数
func f3(args ...interface{}) {
    fmt.Println("--> in func f3")
    fmt.Println("-->(f3) f3 done", args)
}

// 复杂调用例子
func goFunc3(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 main() {
    //-------- 演示,函数作为参数传递
    goFunc1(f1)      //无参数
    goFunc2(f2, 100) //有参数

    //复杂用法
    goFunc3(f1)
    goFunc3(f2, "xxx")
    goFunc3(f3, "hello", "world", 1, 3.14)

    // ------------- 程序延时退出------------
    time.Sleep(5 * time.Second)
}

输出结果

--> in func f1
-->(f1) f1 node
--> in func f2
--> in func f1
--> in func f3
--> in func f2
-->(f2) f2 node 100
-->(f2) f2 node xxx
-->(f3) f3 done [[hello world 1 3.14]]
-->(f1) f1 node
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容