函数接受抽象接口和函数接受结构实现之间的golang转换

我在不同版本的实现之上创建层时遇到的问题。目标是抽象出实现细节,调用者不需要关心我们使用的是哪个实现。

请在此处查看代码示例

^ 该代码可以更好地解释我遇到的问题。

我们有两个版本的 Stream 实现Stream1Stream2. 它们有一个共同的界面Stream

两者都有对应的BindStreamHandler函数接受StreamHandler1or StreamHandler2

我们有一个函数BindStreamHandler和一个通用的实现func StreamHandlerImpl(s Stream)。无论我们使用Stream1or Stream2,一般实现是相同的。

现在我面临一个问题 downcasting StreamHandlerImpl(accepting abstract Streamto StreamHandler1(accepting Stream1))。


烙印99
浏览 92回答 1
1回答

慕盖茨4494581

看起来你正在尝试使用类层次结构(如 Java)来设计你的类,这实际上不是 Go 处理 OO 的方式。我真的建议您围绕接口设计代码,而不是试图模仿继承。由于我们无法推测您为什么有这样的类型,下面是一个最小的代码片段,它将使BindHandler签名保持更严格。func BindHandler(h StreamHandler) {    if Version == 1 {        BindStreamHandler1(func(s Stream1) {            h(s)        })    } else {        BindStreamHandler2(func(s Stream2) {            h(s)        })    }}操场
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go