這個(gè)問題似乎是Can embedded methods access "parent" fields? ,但在我知道沒有辦法訪問“父”字段的意義上并不是這樣;我只是在尋找另一種方法的建議,因?yàn)槲蚁矚g結(jié)構(gòu)的想法Pausable。我正在嘗試制作一個(gè)方便的結(jié)構(gòu),使其他結(jié)構(gòu)能夠接收一些暫停/取消暫停的方法。想象一下:暫停結(jié)構(gòu)type Pausable struct { isPaused bool}func (p *Pausable) Pause() { p.isPaused = true}func (p *Pausable) Unpause() { p.isPaused = false}與 Pausable 組合的結(jié)構(gòu)現(xiàn)在在我的另一個(gè)結(jié)構(gòu)上我想覆蓋這個(gè)Unpause()方法,這樣除了改變p.isPaused一些其他東西的值之外也會(huì)發(fā)生。type Mystruct struct { Pausable // Composition}func (s *Mystruct) Unpause() { s.Unpause() // Do other stuff}問題問題就變成了這樣。我想在結(jié)構(gòu)PauseUntil()中添加一個(gè)方法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() }()}但是,當(dāng)超時(shí)用完時(shí),Unpause()將在 上調(diào)用Pausable,而不是在 上調(diào)用Mystruct。解決這個(gè)問題的聰明方法是什么?
1 回答

慕姐8265434
TA貢獻(xiàn)1813條經(jīng)驗(yàn) 獲得超2個(gè)贊
您可以創(chuàng)建PauseUntil一個(gè)在接口上運(yùn)行的函數(shù)Pauser。
例如
type Pauser interface {
Pause()
Unpause()
}
func PauseUntil(p Pauser) {
p.Pause()
go func() {
time.Sleep(dur)
p.Unpause()
}()
}
然后你應(yīng)該能夠?qū)⒛銈鬟fmyStruct給那個(gè)函數(shù):
ms := new(myStruct)
PauseUntil(ms)
- 1 回答
- 0 關(guān)注
- 142 瀏覽
添加回答
舉報(bào)
0/150
提交
取消