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

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

Patricia Arquette
Patricia Arquette原创
2024-12-15 14:26:16531浏览

How Can I Discover Exported Types in a Running Go Package?

使用运行时包发现来确定包类型

反射包中缺乏类型发现机制,需要采用替代方法来发现导出的包正在运行的 Go 包中的类型,特别是结构。

解决方案在 Go 1.5 及更高版本中:

利用 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)
    }
}

此代码展示了使用导入程序包探索“time”包中导出的名称。

Pre-Go 1.5 方法:

在 Go 1.5 之前,唯一可行的解​​决方案是使用 ast 包来编译源代码。然而,这种方法带来了额外的复杂性。

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

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn