【发布时间】:2014-05-09 05:13:21
【问题描述】:
我是围棋的初学者。多年来,我可能认为其他语言太传统了,但这就是我想在 Go 中做的事情。假设以下用例
- 我有接口I,这个接口有函数start()和stop()
- 有许多实现接口的结构。结构 A、结构 B、结构 C
- 当应用程序启动时,我想在结构 A、B 和 C 上调用 start()
- 同样,当应用程序终止时,我想在 A、B、C 结构上调用 stop()。
- 我不想在代码中的任何位置硬编码结构 A、B 和 C 来调用启动/停止函数。这样当我以后添加struct D(也实现了接口I)时,代码会自动运行,无需修改。
- 为了实现这一点,我需要能够说“Hey Go,给我所有实现接口 I 的类型”。
- 如果我取回 A、B 和 C 的一部分,我可以简单地循环并在正确的时间调用正确的方法。
在 Go 中可行吗?
【问题讨论】:
-
您仍然需要每个结构的值才能调用该方法(该值可以是
nil)。无法对类型 (StructA.start()) 调用方法。那么,你想让这个循环创建一个结构类型的零值,然后调用方法start()吗? -
我不是指调用结构本身,而是调用结构的一个实例。所以也许 Go 的要求是“给我你知道的所有已知的接口实例”,我们得到其中的一部分。不知道有没有办法。
标签: reflection go