版权声明:本文为博主原创文章,转载时请务必注明本文地址, 禁止用于任何商业用途, 否则会用法律维权。 https://blog.csdn.net/stpeace/article/details/83904142
看代码:
package main
import (
"fmt"
)
// task process 基础层
type TaskIntf interface {
Process()
}
type TaskProc struct {
TaskName string
NewProc func() TaskIntf
}
var taskProcMap = make(map[string]*TaskProc, 0)
func registerTaskProc(taskproc *TaskProc) {
taskProcMap[taskproc.TaskName] = taskproc
}
func getTaskProc(taskName string) (*TaskProc, int) {
if _, ok := taskProcMap[taskName]; ok {
return taskProcMap[taskName], 0
}
return nil, -1
}
// task 基础层
type TaskBase struct {
TaskId string
}
// task 业务层
type Task1 struct {
TaskBase
x int
y int
}
type Task2 struct {
TaskBase
x int
}
// task process 业务层
func (p *Task1) Process() {
fmt.Println("process heheda")
}
func register1(taskname string) {
handler := TaskProc{taskname, func() TaskIntf { return new(Task1) } }
registerTaskProc(&handler)
}
func (p *Task2) Process() {
fmt.Println("process haha", p.TaskId)
}
func register2(taskname string) {
handler := TaskProc{taskname, func() TaskIntf { return new(Task2) } }
registerTaskProc(&handler)
}
// 主函数入口
func main() {
{
register1("task1")
proc, _ := getTaskProc("task1")
task := proc.NewProc()
task.Process()
}
{
register2("task2")
proc, _ := getTaskProc("task2")
task := proc.NewProc()
task.Process()
}
}
结果:
process heheda
process haha