Звучит так, как будто вы хотите патч обезьяны Go code.
Нет реального способа сделать это в Go. Да, есть github.com / bouk / monkey , но даже автор не рекомендует его использовать.
Вам также придется:
- Измените свой F2 ().
- Изменить вызывающих абонентов F2 ().
- Добавьте F3 (), которая вызывает F1 () и F2 (), или выполните какой-либо другой рефакторинг, который позволяет вам делать то, что вы хотите.
Есть несколько способов изменить выполняемый код без изменения фактического кода или вызывающих абонентов. Это в значительной степени то, для чего нужны интерфейсы, но вы также можете сделать что-то подобное с встраиванием структуры:
type (
x struct{}
y struct{}
z struct{ x }
)
func (_ x) method() string { return "x" }
func (_ y) method() string { return "y" }
Структура z
встраивает x
, поэтому z{}.method()
вернет x
. Вы можете изменить это значение на y
, добавив структуру y
вместо x
.