Golang 结构组合 - 由结构组成无法访问其"parent"



这个问题似乎是嵌入式方法可以访问"父"字段吗?的副本,但这并不是因为我知道没有办法访问"父"字段;我只是在寻找有关另一种方法的建议,因为我喜欢Pausable结构的想法。


我正在尝试制作一个方便的结构,使其他结构能够接收一些暂停/取消暂停方法。

想象一下以下内容:

可暂停结构

type Pausable struct {
isPaused bool
}
func (p *Pausable) Pause() {
p.isPaused = true
}
func (p *Pausable) Unpause() {
p.isPaused = false
}

使用 Pausable 组合的结构

现在在我的另一个结构上,我想覆盖Unpause()方法,这样除了更改p.isPaused的值之外,还会发生其他一些事情。

type Mystruct struct {
Pausable // Composition
}
func (s *Mystruct) Unpause() {
s.Unpause()
// Do other stuff
}

问题

问题变成了这个。我想在Pausable结构中添加一个PauseUntil()方法,以便它成为

type Pausable struct {
isPaused bool
}
func (p *Pausable) Pause() {
p.isPaused = true
}
func (p *Pausable) Unpause() {
p.isPaused = false
}
func (p *Pausable) PauseUntil(dur time.Duration) {
p.Pause()
go func() {
time.Sleep(dur)
p.Unpause()
}()
}

但是,当超时用完时,Unpause()会在Pausable上调用,而不是在Mystruct上调用。解决这个问题的聪明方法是什么?

你可以PauseUntil一个在Pauser接口上运行的函数。

例如

type Pauser interface {
Pause()
Unpause()
}
func PauseUntil(p Pauser) {
p.Pause()
go func() {
time.Sleep(dur)
p.Unpause()
}()
}

然后,您应该能够将myStruct传递给该函数:

ms := new(myStruct)
PauseUntil(ms)

最新更新