【发布时间】:2019-11-07 22:21:34
【问题描述】:
我正在将一个旧的 Java 项目重写为 Go。
我已经在工作中完成了一些 Go,但我不知道如何将我的 OOP(使用抽象类等)转换为 Go 哲学。
在这个想法中,我有两种类型(即将推出 3 种),它们具有一些通用方法,但其他一些(最多只有 1 或 2 个)应该具有相同的签名但不同的主体。
我知道 Go 没有某种继承。现在我有这样的东西:
type A struct {...}
func (a *A) M1 (){ stuff1 }
func (a *A) M2 (){ stuff2 }
func (a *A) SM (){ special stuff A }
然后:
type B struct {...}
func (b *B) M1 (){ stuff1 }
func (b *B) M2 (){ stuff2 }
func (b *B) SM (){ special stuff B }
我不知道 Go 是如何管理这个的。在 Java 中,我做了一个抽象类,然后用我的两个具体类来实现它。
我想要的是不必复制 M1() 和 M2(),而是能够有一个泛型类型来调用这些方法,然后只需为这两种类型定义 SM()。
【问题讨论】: