如何在 Go 中实现抽象类?由于 Go 不允许我们在接口中有字段,这将是一个无状态对象。那么,换句话说,是否有可能为 Go 中的方法提供某种默认实现?
考虑一个例子:
type Daemon interface {
start(time.Duration)
doWork()
}
func (daemon *Daemon) start(duration time.Duration) {
ticker := time.NewTicker(duration)
// this will call daemon.doWork() periodically
go func() {
for {
<- ticker.C
daemon.doWork()
}
}()
}
type ConcreteDaemonA struct { foo int }
type ConcreteDaemonB struct { bar int }
func (daemon *ConcreteDaemonA) doWork() {
daemon.foo++
fmt.Println("A: ", daemon.foo)
}
func (daemon *ConcreteDaemonB) doWork() {
daemon.bar--
fmt.Println("B: ", daemon.bar)
}
func main() {
dA := new(ConcreteDaemonA)
dB := new(ConcreteDaemonB)
start(dA, 1 * time.Second)
start(dB, 5 * time.Second)
time.Sleep(100 * time.Second)
}
这不会编译,因为不可能将接口用作接收器。
事实上,我已经回答了我的问题(见下面的答案)。但是,这是实现这种逻辑的惯用方法吗?除了语言的简单性之外,还有什么理由不使用默认实现吗?
烙印99
神不在的星期二
九州编程
相关分类