Golang 结构组合 - 与结构组合无法访问其“父”

这个问题似乎是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。解决这个问题的聪明方法是什么?


蝴蝶不菲
浏览 105回答 1
1回答

慕姐8265434

您可以创建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)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go