【发布时间】:2022-01-06 00:02:02
【问题描述】:
我想实现一个像下面这样的执行器:
type task func()
type executor struct {
tasks chan task
}
func (e *executor) Push(t task) {
select {
case e.tasks <- t:
default:
return
}
}
func (e *executor) Run() {
for {
select {
case t := <-e.tasks:
t()
}
}
}
func (e *executor) Init() {
e.tasks = make(chan task, 10)
}
然后,我想将任何函数包装成任务类型,比如这个伪代码:
func make_task(f function_addr, args ...interface{}) task{
return func(){
f(args...)
}
}
我怎样才能做到这一点?
【问题讨论】:
-
这是一件非常奇怪的事情。似乎您只是在
go func(args)之上发明了一个抽象层,以及一个缓冲通道形式的计数信号量。当 Go 专门为此目的为您提供go关键字时,通过通道发送函数及其参数以供 go 例程调用,您可以获得什么好处?
标签: go