如何在Golang中编写函数来处理两种类型的输入数据

时间:2019-06-13 20:45:10

标签: go polymorphism

我有多个struct共享一些字段。例如,

type A struct {
    Color string
    Mass  float
    // ... other properties
}
type B struct {
    Color string
    Mass  float
    // ... other properties
}

我还有一个仅处理共享字段的功能,例如

func f(x){
    x.Color
    x.Mass
}

如何处理这种情况?我知道我们可以将颜色和质量转换为函数,然后可以使用interface并将该接口传递给函数f。但是,如果无法更改AB的类型怎么办。我必须定义两个具有基本相同实现的功能吗?

1 个答案:

答案 0 :(得分:0)

在Go中,您不会像Java,c#等那样使用传统的多态性。大多数操作都是使用合成和类型嵌入完成的。一种简单的方法是更改​​设计并将公用字段分组到单独的结构中。只是想法不同。

type Common struct {
    Color string
    Mass  float32
}
type A struct {
    Common
    // ... other properties
}
type B struct {
    Common
    // ... other properties
}

func f(x Common){
    print(x.Color)
    print(x.Mass)
}

//example calls
func main() {
    f(Common{})
    f(A{}.Common)
    f(B{}.Common)
}

还有使用here提到的接口和获取方法的其他方法,但是IMO这是最简单的方法