Golang的组合继承如何将Commands分派给正确的CommandHandler?

我想学习用 Go 编程,我决定作为一个宠物程序,我会为几个 CommandHandler 做一个简单的不同命令的调度程序(如果 CommandHandler 与它应该处理的命令同名。)


我的问题是,当我想要一个 CommandHandlerManager 发布一个命令,该命令将被分派到正确的 CommandHandler 时,它告诉我我需要一个 HelloWorldCommand 的具体实现,因为 HelloWorldCommandHandler 没有实现 Command 接口。


编译时的错误信息


E:\Desktop\ManBear\golang\src>go run main.go

# command-line-arguments

.\main.go:71: cannot use cmdHandler (type HelloWorldCommandHandler) as type CommandHandler in array or slice literal:

        HelloWorldCommandHandler does not implement CommandHandler (wrong type for Handle method)

                have Handle(HelloWorldCommand)

                want Handle(Command)

我需要有人向我解释我做错了什么,我猜这意味着我应该为我的 HelloWorldCommandHandler 实现一个单独的func方法,仅用于接口,如下所示:


func (ch HelloWorldCommandHandler) Handle(cmd Command) {

    fmt.Println("HelloWorldCommandHandler handled the basic command with name --> " + cmd.GetName())

}

但它产生了更多与类型相关的错误。


我正在尝试做的一个工作示例,并解释我如何以及为什么做错了,将不胜感激。


慕雪6442864
浏览 187回答 1
1回答

宝慕林4294392

的签名Handle必须完全func (ch HelloWorldCommandHandler) Handle(cmd Command) {实现接口。一个快速的解决方法是在你的函数开始时做一个类型断言来从你的)HandleHelloWorldCommandCommand但我认为这可能是一个可能的设计问题的症状:如果多态是 on Command,也许命令应该自己处理/运行?也许Run() error在界面中有一个?
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go