如果您在此處運行分析包:https ://github.com/frederikhors/iss-goland-invalid-type :go run ./analysis它將打?。篺ield.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(".")
.
- 1 回答
- 0 關注
- 94 瀏覽
添加回答
舉報
0/150
提交
取消