首页 > 后端开发 > Golang > 正文

如何动态扫描和操作Golang中实现特定接口的结构?

Barbara Streisand
发布: 2024-10-30 10:29:02
原创
984 人浏览过

 How to Dynamically Scan and Manipulate Structures Implementing a Specific Interface in Golang?

Golang:使用特定实现扫描结构

在 Go 中,使用共享接口操作多个结构可能会带来挑战。虽然可以单独处理每个结构实例,但您可能会遇到自动查找和操作遵守特定接口的所有结构的需要。

问题

场景涉及通过多个结构(A、B 和 C)实现接口 I。应用程序启动时,您需要为每个 A、B 和 C 实例调用 start() 方法。同样,终止时,您需要对这些实例调用 stop() 方法。但是,您希望避免在代码中对这些特定结构进行硬编码,以便在引入实现 I 接口的新结构时进行无缝修改。

答案

不幸的是,在Go中,你设想的方法是不可行的。 Go 是一种静态类型语言,链接器消除了未使用的类型定义和方法。因此,代码中未显式引用的类型将被省略。

替代解决方案

另一种方法是创建一个全局映射(或切片)来存储实现 I 接口的每个结构的实例。这些实例可以在初始化期间使用 init 函数注册:

<code class="go">var instMap = map[string]StartStopper

type A struct {}

func init() {
    instMap["A"] = new(A)
}</code>
登录后复制

在启动期间,您可以迭代地图并在每个实例上调用 Start() 方法。

处理多个实例

如果每种结构类型可以有多个实例,则您需要修改注册过程以在创建实例时将实例添加到地图中。您还应该在实例不再使用时将其删除,以防止潜在的内存泄漏。

以上是如何动态扫描和操作Golang中实现特定接口的结构?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!