假设我有两个结构体
type A struct {
}
func (a *A) SomeFunc (s string) {
// some codes
}
func (a *A) ProcessRequest(funcName string, parameters map[string]*structpb.Value) error {
...
if method := reflect.ValueOf(a).MethodByName(funcName); method.IsValid()
...
values := make([]reflect.Value, 0)
...
rv := method.Call(values)
...
}
type B struct {
}
func (b *B) AnotherFunc (i int) {
//somecode
}
我正在使用反射来调用A中的方法,A是SomeFunc
,它工作得很好。
现在我需要写一个结构体B,它也有ProcessRequest
,它的代码和A中的完全一样。
有什么办法可以重构它吗?
我试着去创造
type ProcessProvider struct{
}
并且让A和B嵌入它,但是当调用该方法时,* ProcessProvider作为接收方被传递,并且它找不到SomeFunc
和AnotherFunc
。
一种接口
type ProcessProvider interface {
ProcessRequest(serviceName string, parameters map[string]*structpb.Value) error
}
是有帮助的,但我仍然要复制粘贴代码。
1条答案
按热度按时间3pmvbmvn1#
ProcessRequest
必须是这些结构体的成员吗?如果没有这样的要求,您可以断开此方法与结构的连接,并接受结构作为参数。