我有一个模块分开的应用程序。有几个实体和CSV模块。CSV模块仅支持struct(Entity),但我想使CSV模块可与任何类型的实体一起使用。现在,它的工作方式如下:Csv模块从通道接收数据并将其严格转换为EverySizestruct。我如何实现动态返回类型,因此它可以与任何类型的Entity一起使用,而不仅限于Everysize
EverySize
Everysize
func prepareWrapData(data []feed.WrapExporterChannels) []everysize.EverySizeItem { var result []everysize.EverySizeItem for _, value := range data { result = append(result, *value.EverySizeItem) } return result }
快速/肮脏的解决方案: 返回接口{},但是您最终欺骗了编译器,而类型检查的麻烦就在您身上。
更好/更安全的解决方案: 考虑需要对返回的类型执行的通用操作,在每种类型上定义这些通用方法,并将这些通用方法保留在接口中。如果您试图从一个函数返回多个类型,则很可能它们之间必须已经有一些共同的关系,或者几乎不需要重组就可以找到它们。从函数返回该接口。这样,编译器将始终能够检查您是否未返回意外内容(未实现那些方法的东西)。您可能需要查看如何factory method在Golang中实现该模式。(提示:它返回接口,而不是通常在C ++ / Java中完成的超类)
factory method