【发布时间】:2017-07-05 10:14:54
【问题描述】:
我在 Go 中有一个结构,它有十多个方法。而且它们几乎都是一样的。其实差别只在一行。
让我们看一个简化的例子。这是第一种方法:
func (s *service) GetUser(i int, s string) (*SomeObject, error) {
CommonMethod1()
CommonMethod2()
user, err := s.internalLayer.GetUser(i, s)
if err != nil {
CommonMethod3()
}
return user, err
}
第二个:
func (s *service) CheckUser(i int) (bool, error) {
CommonMethod1()
CommonMethod2()
exists, err := s.internalLayer.CheckUser(i)
if err != nil {
CommonMethod3()
}
return exists, err
}
还有近 10 个其他人进行了大量的复制和粘贴。我想改进这段代码,想法是创建一些我会在任何地方调用的通用方法。
应该
- 致电
CommonMethod1() - 致电
CommonMethod2() - 调用一些我在参数中传递给它的方法
- 如有错误请致电
CommonMethod3() - 返回参数
你能告诉我是否可以在 Go 中实现这样的常用方法?
user, err := s.GetUser(i, s)
exists, err := s.CheckUser(i)
具有不同的参数计数和不同的返回类型。
【问题讨论】:
-
在你的例子中,每个方法都无条件地调用自己,这不是无休止的“递归”吗?
-
好话。我简化了很多。实际上它调用了一些内部层。
s.internalLayer.CheckUser(i)已更正。