我是Go语言的初学者。我可能认为多年以来其他语言都太传统了,但这就是我想在Go中做的事情。假设以下用例
在Go中可行吗?
简短的答案是:不,那是行不通的
Go是严格输入的语言。这使链接器可以省去应用程序未使用的类型定义,方法和函数。
这意味着,除非在某处引用并使用了某个类型(例如struct A),否则将省略该类型。
但是在您的评论中,您提到您不想要类型,而是想要实现该接口的任何类型的当前实例。
这也不可能。
另类
我的建议是创建一个全局地图(或切片):
并让每个结构体使用init函数向该映射添加实例,该init函数将在应用程序启动时自动调用:
然后,当您要启动所有实例时,只需遍历地图并调用Start()
编辑
如果不是每种类型一个实例,而是每种类型都有多个实例,那么每当创建一个新实例时,您都必须将其添加到地图(或切片)中。而且,您将不得不记住当不再使用实例时,将从地图上删除该实例,否则该实例将不会被垃圾收集器处理。