为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
烙印99 2023-05-15 10:25:21
我在不同版本的实现之上创建层时遇到的问题。目标是抽象出实现细节,调用者不需要关心我们使用的是哪个实现。请在此处查看代码示例^ 该代码可以更好地解释我遇到的问题。我们有两个版本的 Stream 实现Stream1和Stream2. 它们有一个共同的界面Stream。两者都有对应的BindStreamHandler函数接受StreamHandler1or StreamHandler2。我们有一个函数BindStreamHandler和一个通用的实现func StreamHandlerImpl(s Stream)。无论我们使用Stream1or Stream2,一般实现是相同的。现在我面临一个问题 downcasting StreamHandlerImpl(accepting abstract Streamto StreamHandler1(accepting Stream1))。
查看完整描述

1 回答

?
慕盖茨4494581

TA贡献1850条经验 获得超11个赞

看起来你正在尝试使用类层次结构(如 Java)来设计你的类,这实际上不是 Go 处理 OO 的方式。我真的建议您围绕接口设计代码,而不是试图模仿继承。由于我们无法推测您为什么有这样的类型,下面是一个最小的代码片段,它将使BindHandler签名保持更严格。


func BindHandler(h StreamHandler) {

    if Version == 1 {

        BindStreamHandler1(func(s Stream1) {

            h(s)

        })

    } else {

        BindStreamHandler2(func(s Stream2) {

            h(s)

        })

    }

}

操场


查看完整回答
反对 回复 2023-05-15
  • 1 回答
  • 0 关注
  • 91 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信