当前位置: 首页 > 面试题库 >

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

隆飞宇
2023-03-14
问题内容

我有多个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并将该接口传递给function
f。但是,如果不能更改A和的类型,该怎么办B。我是否必须定义两个具有基本相同实现的功能?


问题答案:

在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这是最简单的方法



 类似资料:
  • 问题内容: 例如,我要创建一个可以返回任何数字(负数,零或正数)的函数。 但是,基于某些异常,我希望函数返回 有没有一种方法可以编写可以返回 或 的函数? 好的,因此收到了很多答复。我知道我只是在错误地解决问题,因此我应该在方法中使用某种异常。为了获得更好的答案,我将提供一些示例代码。请别取笑:) 问题答案: 不,您不能在Java中做到这一点。 您可以返回一个。通过返回一个对象,您可以从技术上返回

  • 问题内容: 我们正在考虑将应用程序从obj-c迁移到Swift。一个问题是,我们的obj- c代码中有一个UITableView,其中包含类型为或类型的对象。基本上,它解析cellForRowAtIndexPath上具有的类型。Swift数组(据我所知)只能处理一种类型。鉴于此,我们如何处理UITableView中要使用的两种不同类型?是否会有像DataObj这样的包装对象,我们每个工作都有可精巧

  • 问题内容: 理想情况是在Java方面使用Jackson。我尝试了明显的解决方案: 但是,如果我尝试使用它,则会出现类似以下的错误: 但是,由于jOOQ强制执行类型安全(这很不错,顺便说一句),我不能只添加a.cast(String.class)并完成操作。那么,我是否需要在转换器中做其他事情,还是应该以其他方式调用代码?我目前正在这样做: 并在代码的其他地方使用可更新的记录。 问题答案: 是的,是

  • 我在玩TypeScript中的条件类型。我想用条件返回类型编写一个函数。如果函数被传递一个字符串,它将返回一个名称,否则它将返回一个Id。 我在返回语句中得到以下错误: 我错过了什么?Thnx! 编辑:直接摘自Anders Hejlsberg在Build 2018上的演讲:https://youtu.be/hDACN-BGvI8?t=2241 他甚至说“我们不再需要写函数重载了…” 如果我将代码更

  • 我是第一次来图书馆。我有一些复杂的json数据结构,我想存储在ROOM数据库中,我不知道如何使用多个对象列表的类型转换。以下是我的实体, //还具有映射对象数据类CustomModel(val name:String,val crdate:String)的自定义模型