首页 > 解决方案 > 如何在golang中编写一个函数来处理两种类型的输入数据

问题描述

我有多个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
}

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

标签: gopolymorphism

解决方案


在 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)
}

使用这里提到的接口和吸气剂还有其他方法,但 IMO 这是最简单的方法


推荐阅读