
现在在我的代码中,我有一堆看起来像这样的重复工作。
type fp = func(arg1 string, arg2 int, arg3 []string) bool
func decorator(fp fp, arg1 string, arg2 int, arg3 []string) {
// do some stuff prior to running fp
res := fp(arg1, arg2, arg3)
// do some other stuff depending on res
}
我的问题是,每次我想添加具有不同数量/类型参数的新 fp 类型时,我都必须重新定义此方法,因此我最终在代码中重新定义了装饰器 4-5 次,并且可能需要多做一点。我想用装饰器替换
type FP = func(a ...interface{}) bool
func Decorator(fp FP, argDetails interface{}) {
// do stuff
res := fp(a)
// do other stuff
}
并让 fp 断言类型。但我不确定这是否会导致问题/是一个糟糕的用例,因为我已经看到很多关于不使用界面/会导致性能问题的内容。
正确答案
由于一些原因,泛型没有帮助,特别是泛型仅对类型有帮助,而对参数的数量没有帮助。就我个人而言,我会以不同的方式解决这个问题:
1、什么是店中店?店中店是全诚商多用户版的一大特色,它既是独立的个体,又具有群集功能。我们做个例子说明:假设尊贵的您现实生活中租赁了一个店面,店面空间很大,您可以把您的店面分割成很多独立空间再向别人转租,这样您可以额外获得一部分租赁费用收入,借以减少你的个人租赁费用投入,还能起到活跃销售场所的气氛,俗话说:货卖一堆吗。你租赁的店面可以完全分割成很多空间向外转租,也可以自己保留一块空间为自己销售商品
func decorator(fp func()) {
// do stuff
fp()
// do other stuff
}
使用闭包调用它:
var res sometype
decorator(func() {
res = originalfunc(arg1, arg2, arg3)
})
它在调用站点上有点冗长,但它绝对适用于任何函数签名 - 任何数量或类型的参数以及任何数量或类型的返回值。它甚至可以与方法调用一起使用。听起来你可能正在根据结果做一些逻辑,所以你也可以:
func Decorator(fp func() bool) {
// do stuff
res := fp()
// do other stuff
}
var res someType
Decorator(func() bool {
res = originalFunc(arg1, arg2, arg3)
return res
})
即使装饰函数具有比该 bool 更多的返回值,或者如果您想使用其他逻辑(例如,如果它返回一个错误,您想使用 != 转换为 bool),它仍然可以工作。 nil)。









