gpt4 book ai didi

go - 通过进口商获取有关包裹的所有信息并反射(reflect)?

转载 作者:IT王子 更新时间:2023-10-29 01:38:27 26 4
gpt4 key购买 nike

我偶然发现了这个关于如何获取包中所有类型的问题的答案:

https://stackoverflow.com/a/32142080/470339

效果很好。然而,我想采取的下一步是迭代这些类型中的每一个以获取,例如,NumMethod()。我没有看到一个立即明显的方法来做到这一点 - 任何人都可以阐明一些想法,还是我必须诉诸于扰乱 AST?

最佳答案

您可以使用 ScopeLookup 的名称您感兴趣的 Object

An Object describes a named language entity such as a package, constant, type, variable, function (incl. methods), or label. All objects implement the Object interface.

有一个Named实现 Object 接口(interface)并具有名为 NumMethods 的方法的类型。

package main

import (
"fmt"
"go/importer"
"go/types"
)

func main() {
pkg, err := importer.Default().Import("time")
if err != nil {
fmt.Printf("error: %s\n", err.Error())
return
}

scope := pkg.Scope()
for _, name := range scope.Names() {
if name == "Time" {
obj := scope.Lookup(name)
if tn, ok := obj.Type().(*types.Named); ok {
fmt.Printf("%#v\n", tn.NumMethods())
}
}
}
}

然后,如果您想更进一步,*types.Named 实现 Type接口(interface),因此您可以查看其底层类型,它也是由 Struct 实现的 types.Type , Slice

关于go - 通过进口商获取有关包裹的所有信息并反射(reflect)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47088551/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com