gpt4 book ai didi

go - 无法获取 parser.ParseDir 来解析 Import 语句

转载 作者:IT王子 更新时间:2023-10-29 02:22:00 25 4
gpt4 key购买 nike

我无法让 parser.ParseDir 返回返回的 struct.Imports 字段中的任何信息。 parser.ParseFile 似乎确实有效。我宁愿使用 ParseDir 而不是必须遍历每个文件并调用 ParseFile。这是我尝试过的:

package crawlers

import (
"fmt"
"go/parser"
"go/token"
"os"
"path/filepath"
)

type GoImports struct {
//imports []*string
}

//returns fullpaths
func (g *GoImports) Crawl(entry string) ([]*string, error) {
fp, err := filepath.Abs(entry)
if err != nil {
return nil, err
}
info, err := os.Stat(fp)
if err != nil {
return nil, err
}
if !info.IsDir() {
return nil, fmt.Errorf("Entry point should be a path to a directory of a go package.")
}
fset := token.NewFileSet()
//foo, err := parser.ParseDir(fset, fp, nil, parser.ImportsOnly)
//foo, err := parser.ParseDir(fset, "/Users/dowen00/local/go/src/got/crawlers/testdata/barpackage", nil, parser.ImportsOnly)
foo, err := parser.ParseDir(fset, "/Users/dowen00/local/go/src/opscli", func(os.FileInfo) bool { return true }, parser.ImportsOnly)
//_, err = parser.ParseDir(fset, "/Users/dowen00/local/go/src/got/crawlers/testdata", nil, parser.ImportsOnly)
//foo, err := parser.ParseFile(fset, "/Users/dowen00/local/go/src/got/crawlers/testdata/barpackage/bar.go", nil, parser.ImportsOnly)
if err != nil {
return nil, err
}
//fmt.Printf("%c\n", foo)
//fmt.Printf("%c\n", fset)
for k, v := range foo {
//for kv, vv := range v.Imports {
//fmt.Printf("%s: %c\n", kv, vv)
//}
fmt.Printf("%s: %c\n", k, v.Imports)
}
return nil, nil
}

我做错了什么?

最佳答案

我能够解决这个问题。如果这实际上还没有实现,请参阅 https://golang.org/pkg/go/parser/#ParseDir 的 go 文档。可能应该修改以避免浪费人们的时间。

解决方法如下:

  for _, v := range foo {
//for kv, vv := range v.Imports {
//fmt.Printf("%s: %c\n", kv, vv)
//}
for kk, vv := range v.Files {
for _, i := range vv.Imports {
fmt.Printf("%s: %s\n", kk, i.Path.Value)
}
}
//fmt.Printf("%s: %c\n", k, v.Files)
}

关于go - 无法获取 parser.ParseDir 来解析 Import 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43924291/

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