我创建了一个 scheduler() 函数,它将在一定时间间隔内执行传递的函数。
func scheduler(what func(), delay time.Duration) {
fmt.Printf("Starting scheduled process on interval %d\n", delay)
ticker := time.NewTicker(delay)
quit := make(chan bool, 1)
go func() {
for {
select {
case <- ticker.C:
what()
case <- quit:
ticker.Stop()
return
}
}
}()
<-quit
}
安排以下 ping 功能非常有效。
func ping() {
fmt.Printf("Tick\n")
}
func main() {
scheduler(ping, time.Second)
}
但是,如果我将 ping 更改为这样包含一个参数:
func ping(msg string) {
fmt.Printf ("%s\n", msg)
}
func main() {
scheduler(ping("Hello"), time.Second)
}
编译错误:
ping("Hi") used as value
如何传递带参数的函数而不将其作为返回值传递?我想让 scheduler()
函数足够通用,以便我可以使用具有不同参数签名的其他函数。
最佳答案
使用调用底层函数的匿名函数:
func main() {
scheduler(func() {
ping("Hello")
}, time.Second)
}
这允许调用任意复杂的函数,甚至可以使用闭包:
db := // connect to a DB
scheduler(func() {
ping(db, "Hello") // Or any other arbitrary complexity
}, time.Second)
关于go - 如何将带参数的函数句柄传递给 Go 中的另一个函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48607328/