這個問題似乎是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 關注
- 135 瀏覽
添加回答
舉報
0/150
提交
取消