Go 如何区分哪些依赖项是可下载的?

Go 如何区分哪些依赖项是可下载的?,go,go-modules,gopath,go-get,Go,Go Modules,Gopath,Go Get,我使用此代码获取导入到单个Go源文件中的依赖项列表: //GetFileImports返回从Golang源代码文件导入的所有内容。 func GetFileImports(文件路径字符串)([]字符串,错误){ fset:=token.NewFileSet() file,err:=parser.ParseFile(fset,filepath,nil,parser.ImportsOnly) 如果错误!=零{ 返回零,错误 } 导入:=make([]字符串,len(file.imports)) 对于

我使用此代码获取导入到单个Go源文件中的依赖项列表:

//GetFileImports返回从Golang源代码文件导入的所有内容。
func GetFileImports(文件路径字符串)([]字符串,错误){
fset:=token.NewFileSet()
file,err:=parser.ParseFile(fset,filepath,nil,parser.ImportsOnly)
如果错误!=零{
返回零,错误
}
导入:=make([]字符串,len(file.imports))
对于i:=范围文件.Imports{
imports[i]=strings.Trim(file.imports[i].Path.Value,“\”)
}
退货进口,零
}
我得到以下列表:

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
文件的内容从me提供的响应中筛选出可下载依赖项法德


编辑:需要记住的一点是,导入与包相关,而可下载的依赖项与模块相关。一个模块由多个包组成,并且这些包的模块名作为前缀。因此,您可能需要在
go.sum
文件中查找作为用户返回的包名前缀的条目方法。

一般来说,导入路径不够,因为
go.mod
可能包含
replace
指令,模块中的任何包都可能映射到任何其他包,反之亦然(例如,
github.com/gorilla/mux
可能被
namoled core/mux
替换)"也是一个只为人类存在的概念,;Go本身并没有“项目”的概念。@Adrian是的,我知道,但像dep和Glide这样的东西不知何故决定了哪些依赖项是可下载的,必须添加到索引文件中。