有没有办法拦截go函数?

Zan*_*cat 5 go

我是 golang 新手,想知道是否有任何方法可以拦截函数。

例如,如果我有:

func (foo Foo) f1(a int) int {...}
func (foo Foo) f2(a, b int) int {...}
func (foo Foo) f3(a, b, c int) int {...}
Run Code Online (Sandbox Code Playgroud)

我想实现一些日志记录功能,而不是在每个函数中放置前置和后置拦截器:

func (foo Foo) f1(a int) int {
  preCall()
  ...
  postCall()
}

func (foo Foo) f2(a, b int) int {
  preCall()
  ...
  postCall()
}

func (foo Foo) f3(a, b, c int) int {
  preCall()
  ...
  postCall()
}
Run Code Online (Sandbox Code Playgroud)

在 Go 中是否有更好的模式来做到这一点?比如Java中的AOP。

谢谢

Vol*_*ker 2

有没有办法拦截go函数?

不,没有。

Go 不提供这样的东西,因为源代码直接编译为机器代码,并且 Go 的运行时没有选项挂钩这些东西。