【发布时间】:2020-01-15 14:47:56
【问题描述】:
我是新手,想实现一个接收任务的调度程序(即间隔 + 处理程序)。 我陷入了应该获取处理程序的部分,因为 go 是一种静态语言(我无法获得通用函数签名)。 我想出了以下解决方案: 每个“处理程序”函数都将被空接口包裹:
type GenericFunc interface{}
add_task(GenericFunc(my_func), p1, p2,...)
这将导致以下结构用于保存处理程序及其参数:
type Task struct {
handler reflect.Value
params []reflect.Value
...
}
任务执行将由以下人员调用:
func (t *Task) execute() {
t.handler.Call(t.params)
}
我的问题是这是处理泛型函数的正确方法,还是我缺少更惯用的解决方案? 谢谢。
【问题讨论】:
-
提供的所有链接都不能解决这里提出的问题。另外,我认为最好删除重复的 cmets,因为人们实际上可能会使用这些信息。
-
如果您认为重复的链接不能回答您的问题,请解释原因。根据我的阅读,它们是直接适用的。
标签: go generic-method reflect