登录
首页 >  Golang >  Go问答

函数的返回类型动态性

来源:stackoverflow

时间:2024-03-08 15:36:38 266浏览 收藏

偷偷努力,悄无声息地变强,然后惊艳所有人!哈哈,小伙伴们又来学习啦~今天我将给大家介绍《函数的返回类型动态性》,这篇文章主要会讲到等等知识点,不知道大家对其都有多少了解,下面我们就一起来看一吧!当然,非常希望大家能多多评论,给出合理的建议,我们一起学习,一起进步!

问题内容

我有一个按模块分开的应用程序。有几个实体和 csv 模块。 csv 模块仅支持结构(实体),但我想让 csv 模块适用于任何类型的实体。现在它的工作原理如下: csv模块从通道接收数据并严格将其转换为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 方法 模式是如何在 Golang 中实现的。 (提示:它返回接口,而不是像 C++/Java 中通常完成的那样返回超类)

正如评论中所述 - Go 不允许支持泛型返回类型。因此,您要么想要返回一个您知道实体类型符合的接口类型,要么返回空接口类型 interface{}

本篇关于《函数的返回类型动态性》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于Golang的相关知识,请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>