如何在golang中的F2()之前调用函数F1()

时间:2019-04-22 06:23:24

标签: go

我已经在生产中使用函数F2()。 F2()从许多其他地方被调用。我不想触摸F2()或不想触摸F2被调用的所有地方。如何在调用F2()之前调用另一个方法F1()?

1 个答案:

答案 0 :(得分:1)

听起来您想monkey patch进行编码。

Go中没有真正的方法可以做到这一点。是的,有github.com/bouk/monkey,但即使是作者也不建议使用它。

您要么必须:

  • 更改您的F2()。
  • 更改F2()的调用方。
  • 添加一个调用F1()和F2()的F3(),或进行其他一些重构,让您做自己想做的事。

有一些方法可以更改正在运行的代码,而无需更改实际的代码或调用者。这几乎就是接口的用途,但是您也可以对结构嵌入进行类似的操作:

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

相关问题