为了账号安全,请及时绑定邮箱和手机立即绑定

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 关注
  • 104 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信