我想学习用 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())}但它产生了更多与类型相关的错误。我正在尝试做的一个工作示例,并解释我如何以及为什么做错了,将不胜感激。
1 回答
宝慕林4294392
TA贡献2021条经验 获得超8个赞
的签名Handle必须完全func (ch HelloWorldCommandHandler) Handle(cmd Command) {实现接口。一个快速的解决方法是在你的函数开始时做一个类型断言来从你的)HandleHelloWorldCommandCommand
但我认为这可能是一个可能的设计问题的症状:如果多态是 on Command,也许命令应该自己处理/运行?也许Run() error在界面中有一个?
- 1 回答
- 0 关注
- 186 浏览
添加回答
举报
0/150
提交
取消
