【发布时间】:2016-04-22 16:50:33
【问题描述】:
我正在尝试在从存储 A 获取的两个存储之间建立一个中间层,将其转换为相应类型的存储 B,然后存储它。由于我需要转换大约 50-100 种类型,因此我希望使用 map[string]func 并基于 storageA.Type 确定我需要调用哪个转换函数。
这些转换函数中的每一个都将返回不同的结构,它们都反映了存储 B 中的不同类型。这些存储 B 结构中的每一个都实现了一个通用接口,因此它们可以调用函数。
归结为我的问题是我不能将func(StorageAType) StorageBType1 转换为func(StorageAType) StorageBType,即使StorageBtype1 实现了接口StorageBType。
我创建了这个相当长的playground,因为我意识到用文字描述问题很棘手。注释掉第 38-41 和 60-63 行将使它运行,但这是我想要使用的那些行。对不起它的大小,但我想不出一个不那么冗长但清晰的例子。
请注意,我必须重新创建我的 stackoverflow 帐户,所以我认为我没有代表对答案发表评论。
*编辑:
非常典型。刚问完,我就知道如何解决了。通过在转换器函数中返回接口类型而不是确切的类型,在此 playground 中进行了更改。
【问题讨论】: