美文网首页
go函数作为参数传递

go函数作为参数传递

作者: 笑吧小鸟 | 来源:发表于2019-02-25 10:53 被阅读0次
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

相关文章

网友评论

      本文标题:go函数作为参数传递

      本文链接:https://www.haomeiwen.com/subject/kkywyqtx.html