问题:
在 Golang 中,是否可以以编程方式识别所有接口实现指定接口的结构?这将允许在运行时自动初始化和终止这些结构,而无需在代码中硬编码它们的名称。
答案:
不幸的是,简短的答案是否定的。
说明:
Golang 是一种严格类型语言,这意味着链接器可以消除应用程序不使用的类型定义、方法和函数。因此,除非在代码中的某处引用和使用类型(例如 struct A),否则它不会包含在编译的二进制文件中。
此外,即使访问实现特定接口的类型的当前现有实例也是如此不可行。
替代方法:
为了实现所需的功能,另一种方法是创建一个全局映射或切片来存储实现结构的实例界面。然后,每个结构体都可以使用在应用程序启动时自动调用的 init 函数向此映射添加一个实例。然后,在必要时,应用程序可以迭代映射并在实例上调用所需的方法。
这种方法允许动态注册结构,并且无需在代码中硬编码其名称。但是,如果特定类型有多个实例,则必须实现额外的机制来管理它们的注册和注销。
以上是有没有办法以编程方式查找 Golang 中接口的所有实现?的详细内容。更多信息请关注PHP中文网其他相关文章!