golang 包依赖管理
介绍
GO是一种新语言,并且由于GO社区的缘故,自GO 1.0发布以来,它发展Swift。 但是,保持其最基本的简单性原则不变。
像其他编程语言一样,GO具有依赖关系管理方法,例如Node.js中的npm(Python中的pip)。
GO用户和开发人员一直在使用go get 。 并且有许多工具,例如Godep,glide等,可以弥补go get工具的一些不足。 其中一种工具是glide,我们将看到如何使用glide进行软件包管理。
但是在将来,GO社区可能会在github.com/golang/dep上看到当前正在开发的更好的依赖工具。
在这里,我将逐步介绍如何使用不同的工具来管理GO中的程序包。
工作空间
设置Golang时,我们有一个$ GOPATH所引用的目录。 该目录是我们的工作空间,所有有关go的事情都从这里开始。 工作区的结构看起来像
-Work | -- bin/ | -- pkg/ | -- src/ | -- project1/ | -- project2/
bin —包含可执行命令。
pkg —包含软件包对象。
src —包含源文件。
$ GOPATH
这是一个环境变量,用于指定工作空间的位置。 在$ GOPATH / src目录中,我们为每个开始处理的项目创建一个新目录。
之所以存在$ GOPATH,是因为:
- GO代码中的所有导入声明均通过导入路径以及$ GOPATH / src中的目录(其中go工具可以计算所有导入的软件包)引用了一个软件包。
- 存储go get检索到的依赖项。
GO GET的简单性
go get是官方的GO工具,用于从存储库中获取GO代码并将其存储在$ GOPATH / src中。
它隔离具有不同导入路径的软件包。
在我们的源代码中,我们只需要指定我们的编译器应该在哪里获取最新的源代码即可。
import ( “fmt” “github.com/gorilla/mux” )
在运行代码之前,我们必须使用go get导入库:
去github.com/gorilla/mux
并且它将从GitHub存储库的master分支安装最新的提交,这些软件包不限于GitHub。
例如golang.org/x/mobile-Android上用于GO的库和构建工具。
go get总是获取磁盘上尚未存在的任何软件包的最新代码。
去得到标志
go get还使用标志指令,例如[-u,-insecure,-d,-f,-t,-fix,-v。]
-u标志指示获取使用网络更新命名软件包及其依赖关系的信息。
去获取-u github.com/gorilla/mux
-insecure标志允许使用非安全方案(例如HTTP)从存储库中获取信息并解析自定义域。
去获取-不安全的github.com/name/repo
-d标志指示下载软件包后停止; 也就是说,它指示不要安装软件包。
-f标志仅在设置了-u后才有效,它会强制-u不验证每个软件包是否已从其导入路径所隐含的源代码控制存储库中检出。 如果源是原始文件的本地派生,这将很有用。
-fix标志指示get在解决依赖关系或构建代码之前对下载的软件包运行修复工具。
-t标志指示还可以下载为指定软件包构建测试所需的软件包。
GO GET的缺点
我们看到GO保存所有依赖项的方式,这种依赖项管理方法存在一些问题,例如:
- 除非将其托管在完全不同的存储库中,否则我们将无法确定所需的软件包版本,因为go总是从最新版本的软件包中获取。 当团队合作时,这会导致问题,我们最终可能会获取不同版本的软件包。
- 而且由于go get installs软件包位于$ GOPATH / src目录中,因此我们必须对不同项目使用相同版本的软件包,因为我们的所有项目都在一个目录下。 因此,每个项目都不会具有不同版本的依赖关系。
使用Glide进行包裹管理
现在,我们已经了解了GO如何处理导入和管理包,并且还看到了开发人员在处理依赖项时面临的一些困难。 让我们告诉您如何解决它们。
GO开发人员已经使用了很多工具来处理软件包,例如godep,glide等。我们将解释使用的软件包:GLIDE。
什么是滑翔机?
Glide是用于GO语言的软件包管理工具。 它从不同的源下载依赖关系,然后锁定版本,以便每个团队成员获得完全相同的版本来下载和更新不会破坏项目的依赖关系。
安装Glide
- 首先,我们将使用shell脚本curl https://glide.sh/get |安装glide 。 SH
它将获得最新版本的glide,并将脚本放入GO二进制文件($ GOPATH / bin或$ GOBIN)中。
- 您还可以使用以下方法在Mac OS X上安装最新版本:
$ brew install glide
- 在Ubuntu Precise(12.04),Trusty(14.04),Wily(15.10)或Xenial(16.04)上,您可以使用PPA安装:
$ sudo add-apt-repository ppa:masterminds / glide && sudo apt-get更新
$ sudo apt-get install glide
使用滑翔
初始化依赖
一旦安装了Glide,就可以转到项目文件夹并使用以下命令生成glide.yaml文件:
package: nexdash-backend-go import: - package: github.com/gorilla/mux version: ^1.4.0 - package: github.com/jinzhu/gorm version: ^1.0.0 subpackages: - dialects/postgres
$ glide init
这将扫描我们项目目录中的代码库,并创建一个包含依赖项的glide.yaml文件。
在每个软件包中,它都会在GO文件中读取导入内容。
我们甚至可以编辑glide.yaml并添加信息,例如版本。
glide.yaml文件包含两个主要内容
- 它命名当前程序包。
- 它声明了外部依赖关系。
glide.yaml文件:
在这里,它用其版本和子程序包来命名当前程序包nexadash-backend-go和导入的库。
更新依赖
我们可以获取项目的依赖项,并使用以下命令在glide.yaml文件中将其设置为指定的版本:
$滑行
这将在项目目录中安装与版本信息匹配的最新依赖项。
然后,Glide将创建一个锁定文件glide.lock,其中包含锁定到特定提交ID的所有依赖项树。
在此,依赖性树是指包括依赖性的子依赖性在内的所有依赖性。
glide.lock文件:
hash: e444b77a1ddd14f0737181e0f2dc1d4468f88db77b2e36cddde6c67547c39948 updated: 2017-06-14T13:56:26.916785921+5:30 imports: - name: github.com/gorilla/context version: 08b5f424b9271eedf6f9f0ce86cb9396ed337a42 - name: github.com/gorilla/mux version: bcd8bc72b08df0f70df986b97f95590779502d31 - name: github.com/gorilla/gorm version: 5174cc5c242a728b435ea2be8a2f7f998e15429b subpackages: - dialects/postgres - name: github.com/jinzhu/inflection version: 1c35d901db3da928c72a72d8458480cc9ade058f - name: github.com/lib/pq version: 8837942c3e09574accbc5f150e2c5e057189cace subpackages: - hstore - oid testImports: []
安装依赖
现在,我们有了一个glide.lock文件,其中包含所有指定的依赖项和版本,我们使用$ glide install安装在锁定文件中指定的版本。
继续阅读完整的文章, 网址为 — XenonStack.com/Blog
golang 包依赖管理