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

标签 go go-modules gopath go-get

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

// 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/datanamoled-core/shared是我自己项目的一部分,github.com/gorilla/muxgithub.com/gorilla/websocket是可下载的依赖项,其余都是标准库依赖项。是否有一种可靠且明确的方法来区分当前项目的依赖项、可下载的依赖项和标准库依赖项,仅通过它们的导入路径?考虑到项目路径也可能是 Github 关联。

最佳答案

如果你使用 Go Modules,你可以使用 go.sum 的内容文件以从您的方法提供的响应中过滤可下载的依赖项。

编辑:要记住的一件事是导入与包有关,而可下载的依赖项与模块有关。一个模块由几个包组成,并且这些包的模块名称作为前缀。所以你可能需要查看 go.sum文件中的条目是您的方法返回的包名称的前缀。

关于go - 如何区分哪些依赖项是可下载的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58625660/

相关文章:

go - 为什么我的 GOPATH/src 刚安装后包含几个目录?

go - 无法识别来自 Switch 语句 golang 中的 channel 的字符串变量

angular - 从 Angular 到 GO 的 HTTP 请求 => 状态代码 :422 Unprocessable Entity

go - 迭代结构列表并更改成员变量

go - 当我将 go mod 添加到我的项目时,无法运行它,我该如何解决?

go - 如何在 Go 中重构模块名称?

go - 关于 $GOPATH 的一些问题

go - 如何在golang中使用gin包获取postman的header数据

go - 为什么代码中有些包的前缀是v2,而我克隆的文件路径却没有v2?

go - 卡拉克斯 : package is not in any of the go paths