我使用此代码获取在单个Go源文件中导入的依赖项列表:
// GetFileImports returns all the imports from the Golang source code file.
func GetFileImports(filepath string) ([]string, error) {
fset := token.NewFileSet()
file, err := parser.ParseFile(fset, filepath, nil, parser.ImportsOnly)
if err != nil {
return nil, err
}
imports := make([]string, len(file.Imports))
for i := range file.Imports {
imports[i] = strings.Trim(file.Imports[i].Path.Value, """)
}
return imports, nil
}
我得到这个列表:
namoled-core/data
namoled-core/shared
encoding/json
fmt
io/ioutil
log
net/http
github.com/gorilla/mux
github.com/gorilla/websocket
其中namoled-core/data
和namoled-core/shared
是我自己项目的一部分,github.com/gorilla/mux
和github.com/gorilla/websocket
是可下载的依赖项,其余都是标准库依赖项。是否有一种可靠而明确的方法可以仅通过导入路径将依赖项与当前项目、可下载依赖项和标准库依赖项区分开来?考虑到该项目路径也可能是Github链接。
如果使用Go模块,可以使用go.sum
文件的内容从方法提供的响应中筛选出可下载的依赖项。
编辑:需要记住的一点是,导入与包有关,而可下载的依赖项与模块有关。一个模块由几个包组成,这些包以其模块名称作为前缀。因此,您可能需要在go.sum
文件中查找作为方法返回的包名称前缀的条目。