这个问题似乎是Can embedded methods access "parent" fields? ,但在我知道没有办法访问“父”字段的意义上并不是这样;我只是在寻找另一种方法的建议,因为我喜欢结构的想法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}问题问题就变成了这样。我想在结构PauseUntil()中添加一个方法Pausable,这样它就变成了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。解决这个问题的聪明方法是什么?
1 回答
慕姐8265434
TA贡献1813条经验 获得超2个赞
您可以创建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)
- 1 回答
- 0 关注
- 104 浏览
添加回答
举报
0/150
提交
取消