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

标签 go parameters func

主要问题是“是否可以将任何类型的 func 作为参数传递以及如何传递?”。 我正在学习 Go 并且想像这样制作我自己的异步包装函数:

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

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

    return done;
}

并调用它:

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;

附言抱歉我的英语不好...

编辑1: 我知道这是无用的、缓慢的和危险的。这只是我想要实现的疯狂想法。

最佳答案

Go当然可以做到。请考虑以下简单示例:

package main

import (
        "fmt"
)

type funcDef func(string) string

func foo(s string) string {
        return fmt.Sprintf("from foo: %s", s)
}

func test(someFunc funcDef, s string) string {
        return someFunc(s)
}

func main() {
        output := test(foo, "some string")
        fmt.Println(output)
}

具体到您的情况,您只需要:

type funcDef func(int, int) int

func AsyncFunc(func funcDef, a, b int) chan bool {
    ....
}

done := AsyncFunc(max, 5, 8)

关于golang 将 func 作为参数传递给另一个 func,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44577234/

相关文章:

c# - 查找 Func 委托(delegate)的调用方法的名称

go - 如何将 zap 记录器与 go-kit 一起使用?

c++ - 按值传递或按引用传递

C# Func<> Delegate property setter 问题

c# - Caliburn.micro 将参数从一个屏幕传递到另一个屏幕

c# - 将接口(interface)类型作为参数传递

c# - 如何针对集合调用 Expression<Func<Entity, bool>>

go - *string 和 sql.NullString 之间的区别

concurrency - (websocket) Golang 同步数据锁定失败 - Broken Pipe

go - 如果通过 Golang channel 发送,结构实际上是否在 goroutine 之间复制?