请教一下,我这有个功能是想请教一下用go可以怎样更好的实现。功能逻辑是有很多种类型任务,这些任务大部分的逻辑相关,只有执行方法里面的逻辑是不一样的,所以有一个父类结构体Task,具体的任务TaskXX都会继承这个结构体再实现自己的任务逻辑。现在问题看下面代码,直接执行任务的时候的入参类型要怎么解决?
type Task struct{
TaskExec
Status int
Name string
StratTime int64
EndTime int64
}
type TaskExec interface{
exec()
}
type TaskA struct{
Task
ParamA string
}
type TaskB struct{
Task
ParamA string
}
func (TaskA) exec(){
// 执行任务A的逻辑
}
func (TaskB) exec(){
// 执行任务B的逻辑
}
// 执行任务,问题点在入参这里,这样写入参就只能是Task,不能传TaskA和TaskB,用go有什么办法可以实现像java一样传子类做为入参
func Exec(task Task){
// 修改任务状态为执行中
task.Status = 1
// 记录任务开始执行时间
task.StartTime = uint64(time.Now().Unix())
// 这里还会有很共性逻辑处理被省略掉了
// 执行具体任务的逻辑
task.exec()
// 修改任务状态为执行结束
task.Status = 2
// 记录任务执行结束时间
task.EndTime = uint64(time.Now().Unix())
// 这里也是还会有很共性逻辑处理被省略掉了
}