当我克隆用golang编写的项目时,很少有像'github.com/XXXX'这样的导入丢失。有没有办法通过命令批量获取这些导入?或者我想要一个接一个地拿到它们。
很多golang项目现在都使用依赖管理,所以你应该首先寻找它。例如,Glide.lock(滑动)或Gopkg.lock(dep - 人们现在移动的方式)文件存在于项目的根目录中。
如果使用了dep并且你安装了它,那么dep ensure
会为你设置依赖项,并确保你得到作者想要的版本
如果一个项目没有使用依赖关系管理,你可以使用go get ./...
获取包,但我认为你不会保证正确的版本(例如,如果作者被固定到dep的版本标签)
如果你运行dep init
它会在项目上设置dep并尝试解析正确的版本,但是如果星星没有对齐,这并不总是有效(例如我使用gopkg.in看到了依赖关系的问题)
您应该使用go get
来获取“远程”包。引自Command go: Download and install packages and dependencies
获取导入路径指定的包及其依赖项的下载。然后安装命名包,比如'go install'。
您可以在以下所有命令中使用-v
标志,因此您将看到go get
在幕后做了什么。
如果您只想下载软件包但不想安装它们,可以使用-d
标志。
这些示例使用示例远程包github.com/somebody/somepackage
,但显然它适用于在github.com之外托管的其他包。
有关更多信息,请参阅官方文档:Command go,或键入go help get
。
要获得包含该包的所有依赖项并安装它们的单个包,请使用
go get github.com/somebody/somepackage
要获得包含其所有依赖项的包以及以该路径为根的所有其他包(及其依赖项),并安装所有这些包,请使用:
go get github.com/somebody/somepackage/...
从命令引用:
导入路径是一种模式,如果它包含一个或多个“...”通配符,每个通配符都可以匹配任何字符串,包括空字符串和包含斜杠的字符串。这样的模式扩展到GOPATH树中找到的所有包目录,其名称与模式匹配。
要获得包含所有依赖项(和“子包”)的包,包括测试的依赖项,并安装所有它们,请使用:
go get -t github.com/somebody/somepackage/...
要更新您已有的包,请使用:
go get -u github.com/somebody/somepackage/...
要获取已有的包的依赖关系(不一定是来自远程位置):
go get path/to/package/name/...
或者转到其文件夹,然后您可以使用相对路径:
go get ./...
尝试在项目的根目录中使用go get ./...