Этот вопрос кажется дубликатом Могут ли встроенные методы получить доступ к "родительским" полям? , но я не знаю, что нет никакого способа получить доступ к "родительским" полям;Я просто ищу предложения по другому способу сделать это, потому что мне нравится идея Pausable
структуры.
Я пытаюсь создать удобную структуру, которая позволяет другим структурам получать некоторую паузу/ неиспользуемые методы.
Представьте себе следующее:
Pausable struct
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
.Что было бы умным способом обойти это?