【发布时间】:2021-05-18 11:15:05
【问题描述】:
我是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 {...}
我想实现一些日志功能,而不是在每个函数中放置前置和后置拦截器:
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()
}
在 go 中有没有更好的模式来做到这一点?比如Java中的AOP。
谢谢
【问题讨论】:
-
我认为go中的包装器/装饰器模式受函数参数和返回类型的约束。
标签: go