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

动态函数返回类型

双恩
2023-03-14
问题内容

我有一个模块分开的应用程序。有几个实体和CSV模块。CSV模块仅支持struct(Entity),但我想使CSV模块可与任何类型的实体一起使用。现在,它的工作方式如下:Csv模块从通道接收数据并将其严格转换为EverySizestruct。我如何实现动态返回类型,因此它可以与任何类型的Entity一起使用,而不仅限于Everysize

    func prepareWrapData(data []feed.WrapExporterChannels) []everysize.EverySizeItem {
        var result []everysize.EverySizeItem
        for _, value := range data {
            result = append(result, *value.EverySizeItem)
        }
    return result
}

问题答案:

快速/肮脏的解决方案: 返回接口{},但是您最终欺骗了编译器,而类型检查的麻烦就在您身上。

更好/更安全的解决方案:
考虑需要对返回的类型执行的通用操作,在每种类型上定义这些通用方法,并将这些通用html" target="_blank">方法保留在接口中。如果您试图从一个函数返回多个类型,则很可能它们之间必须已经有一些共同的关系,或者几乎不需要重组就可以找到它们。从函数返回该接口。这样,编译器将始终能够检查您是否未返回意外内容(未实现那些方法的东西)。您可能需要查看如何factory method在Golang中实现该模式。(提示:它返回接口,而不是通常在C ++ / Java中完成的超类)



 类似资料:
  • 因此,首先,我正在构建一个基于Selenium和Java的自动化库。我正在构建一种参数化传递到测试方法中的数据的方法。我正在使用TestNG。 我需要帮助的是构建这个数据提供程序方法... 现在,如果我返回指定的类,它将与其中的一个一起工作。 示例: 如果您想查看我在GitHub上的项目,可以访问:https://GitHub.com/dominic-pace/autocorecomons

  • 我错过了什么,为什么这看起来这么难?

  • 我试着写一个小函数,它接受两个列表,并根据另一个列表的元素对一个进行排序。所以类似于: 将产生一个排序列表。 然而,可能是一个不同的列表,比如整数、浮点数或其他列表。理想情况下,我希望我的程序能够获取我抛出的任何列表,根据

  • 注意:请通读后再回答。这看起来是一个简单的问题,但我不确定它是否如此简单。另外,我是打字新手,所以对我宽容点 所以这是用例。我有一个模型用户,我编写了一个通用函数来根据数据库中的电子邮件检查用户是否存在。如果存在,则返回用户对象。 现在,如果它是任何其他对象,那么我可以定义类型并继续我的代码,但它是我从DB得到的用户对象,不知道如何解决这个问题。 我通过提到返回类型“any”找到了解决方法,但我的

  • 函数作为返回值 高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回。 我们来实现一个可变参数的求和。通常情况下,求和的函数是这样定义的: def calc_sum(*args): ax = 0 for n in args: ax = ax + n return ax 但是,如果不需要立刻求和,而是在后面的代码中,根据需要再计算怎么办?可以不返回

  • 函数作为返回值 高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回。 我们来实现一个可变参数的求和。通常情况下,求和的函数是这样定义的: def calc_sum(*args): ax = 0 for n in args: ax = ax + n return ax 但是,如果不需要立刻求和,而是在后面的代码中,根据需要再计算怎么办?可以不返回