Как вызвать функцию F1 () перед F2 () в golang - PullRequest
0 голосов
/ 22 апреля 2019

У меня уже есть функция F2 ().F2 () вызывается из многих других мест.Я не хочу касаться F2 () или не хочу касаться всех мест, откуда вызывается F2.Как вызвать другой метод F1 () непосредственно перед вызовом F2 ()?

1 Ответ

1 голос
/ 23 апреля 2019

Звучит так, как будто вы хотите патч обезьяны 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...