lnkToKing 2023-08-31 16:16 采纳率: 0%
浏览 5

go里面的继承实现,子类怎么做为父类类型做为入参(语言-golang)

请教一下,我这有个功能是想请教一下用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())
  // 这里也是还会有很共性逻辑处理被省略掉了
}
  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-08-31 18:18
    关注

    【以下回答由 GPT 生成】

    // 解决方案
    // 在Go语言中,可以使用接口实现类似于Java中子类作为父类类型的入参的功能。具体实现方法如下:
    
    // 定义一个接口和方法
    type TaskInterface interface {
        exec()
    }
    
    func Exec(task TaskInterface) {
        // ...
        task.exec()
        // ...
    }
    

    在代码中,我们创建了一个名为TaskInterface的接口,并将exec方法声明在其中。接着,我们对Exec函数的入参进行更改,使用TaskInterface作为参数类型。TaskA和TaskB都实现了TaskInterface接口中的exec方法,因此它们可以被传递给Exec函数。这样,我们就可以将TaskA和TaskB作为入参传递给Exec函数了。


    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 创建了问题 8月31日

悬赏问题

  • ¥15 wegame打不开英雄联盟
  • ¥15 公司的电脑,win10系统自带远程协助,访问家里个人电脑,提示出现内部错误,各种常规的设置都已经尝试,感觉公司对此功能进行了限制(我们是集团公司)
  • ¥15 救!ENVI5.6深度学习初始化模型报错怎么办?
  • ¥30 eclipse开启服务后,网页无法打开
  • ¥30 雷达辐射源信号参考模型
  • ¥15 html+css+js如何实现这样子的效果?
  • ¥15 STM32单片机自主设计
  • ¥15 如何在node.js中或者java中给wav格式的音频编码成sil格式呢
  • ¥15 不小心不正规的开发公司导致不给我们y码,
  • ¥15 我的代码无法在vc++中运行呀,错误很多