首页 > 后端开发 > Golang > 如何在运行时发现Go包中所有导出的类型?

如何在运行时发现Go包中所有导出的类型?

DDD
发布: 2025-01-05 21:04:45
原创
834 人浏览过

How Can I Discover All Exported Types in a Go Package at Runtime?

运行时包的可发现性

与反射包不同,Go 缺乏类型发现机制,允许在不明确知道类型的情况下查询所有类型。这就提出了一个问题:

是否有替代方法来发现活动 Go 包中的所有导出类型(特别是结构)?

一个理论解决方案是假设的函数“DiscoverTypes”,接受一个包并返回所有发现的类型。但是,reflect 包中不存在此功能。

寻找解决方案

在 Go 1.5 及更高版本中,新引入的包类型和导入器提供了一种方法检查二进制文件和源代码包。通过使用以下代码,您可以发现包中的所有导出类型:

package main

import (
    "fmt"
    "go/importer"
)

func main() {
    pkg, err := importer.Default().Import("time")
    if err != nil {
        fmt.Printf("error: %s\n", err.Error())
        return
    }
    for _, declName := range pkg.Scope().Names() {
        fmt.Println(declName)
    }
}
登录后复制

但是,在 1.5 之前的版本中,唯一可靠的方法是使用 ast 包来编译源代码。

真实用例

此功能在识别和识别代码的代码生成实用程序中特别有用。实例化满足特定标准的类型。这些实用程序有助于根据发现的类型生成测试函数,并减少手动代码生成步骤的需要。

以上是如何在运行时发现Go包中所有导出的类型?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板