Библиотека, которую я использую, имеет тип с несколькими методами:
type Foo struct {
}
func (f *Foo) method1() int { ... }
func (f *Foo) method2() int { ... }
func (f *Foo) method3() int { ... }
// ... and so on
Я бы действительно хотел применить определенное поведение каждый раз, когда я вызываю method1
для этого типа:
func (f *Foo) method1Wrapper() int {
incrementCounter()
return f.method1()
}
Но это добавляет новый метод, который я должен был бы вызвать вместо просто прямого вызова method1()
самого себя.
В качестве альтернативы, я думаю, я мог бы создать свой собственный тип:
type Foo2 struct {
Foo
}
func (f *Foo2) method1() int {
incrementCounter()
return f.Foo.method1()
}
Но тогда мне нужно было бы создать набор шаблонного кода для прокси всех вызовов method2
, method3
и т. Д. Вплоть до реализации Foo
, и . изменить все мои использования от Foo
до Foo2
. ?
Возможно ли непосредственно исправить или обернуть Foo.method1()
само по себе без создания подкласса?