time.AfterFunc()
接受一个持续时间和一个在该持续时间到期时要执行的函数。但该函数不能是接受参数的函数。
例如:不能传递如下函数:
func Foo (b *Bar) {}
不过,可以初始化一个调用上述函数的新函数,然后传递它:
f := func() {
Foo(somebar)
}
timer := time.AfterFunc(1*time.Second, f)
真的应该这样做吗?
为什么time.AfterFunc不接受任何接受参数的函数?
是否存在其他/更好的方法来做到这一点?
最佳答案
从参数创建一个函数,并返回它。
package main
import (
"fmt"
"time"
)
func foo(bar string) {
fmt.Printf("in foo('%s')\n", bar)
}
func newFunc(bar string) func() {
fmt.Printf("creating func with '%s'\n", bar)
return func() {
foo(bar)
}
}
func main() {
somebar := "Here we go!"
f := newFunc(somebar)
_ = time.AfterFunc(1*time.Second, f)
time.Sleep(2 * time.Second)
}
关于go - 将带参数的函数传递给 time.AfterFunc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49626229/