为了账号安全,请及时绑定邮箱和手机立即绑定

为什么这是 `*invalid type` 而不是 `*Games`?

为什么这是 `*invalid type` 而不是 `*Games`?

Go
qq_花开花谢_0 2022-10-31 16:21:45
如果您在此处运行分析包:https ://github.com/frederikhors/iss-goland-invalid-type :go run ./analysis它将打印:field.Name: id - field.Type: stringfield.Name: name - field.Type: string        field.Name: games - field.Type: *invalid type我不明白为什么我要*invalid type代替*Games?代码分析/main.go:package mainimport (    "go/types"    "golang.org/x/tools/go/packages")func main() {    playerModel := LoadPackage("./player.go")    var playerStruct *types.Struct    for _, entity := range playerModel.Types.Scope().Names() {        if entity == "Player" {            playerStruct = GetStruct(entity, playerModel)            break        }    }    for i := 0; i < playerStruct.NumFields(); i++ {        field := playerStruct.Field(i)        println("field.Name: " + field.Name() + " - field.Type: " + field.Type().String())    }}func LoadPackage(path string) *packages.Package {    const mode = packages.NeedTypes |        packages.NeedName |        packages.NeedSyntax |        packages.NeedFiles |        packages.NeedTypesInfo |        packages.NeedTypesInfo |        packages.NeedModule    cfg := &packages.Config{Mode: mode}    pkgs, err := packages.Load(cfg, path)    if err != nil {        panic(err)    }    return pkgs[0]}func GetStruct(structName string, pkg *packages.Package) *types.Struct {    foundStruct := pkg.Types.Scope().Lookup(structName)    if foundStruct == nil {        return nil    }    res, _ := foundStruct.Type().Underlying().(*types.Struct)    return res}播放器.go:type Player struct {    id    string    name  string    games *Games}游戏.go:package maintype Games struct {    wins   []string    losses []string}
查看完整描述

1 回答

?
慕侠2389804

TA贡献1719条经验 获得超6个赞

使用LoadPackage("./player.go"). 并且该文件不是声明类型的文件Games。要加载有关所有类型包的信息,您需要加载整个包。

你需要使用LoadPackage(".").


查看完整回答
反对 回复 2022-10-31
  • 1 回答
  • 0 关注
  • 110 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号