亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Golang 結構組合 - 與結構組合無法訪問其“父”

Golang 結構組合 - 與結構組合無法訪問其“父”

Go
蝴蝶不菲 2023-04-17 15:28:31
這個問題似乎是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)


查看完整回答
反對 回復 2023-04-17
  • 1 回答
  • 0 關注
  • 135 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號