Go语言依赖管理
早期的Go语言被很多开发者所吐槽的一个问题就是没有依赖包的管理,不过随着版本的不断更迭,Go语言依赖管理方面也在不断的完善。为什么需要依赖管理最初的时候Go语言所依赖的所有的第三方包都放在 GOPATH 目录下面,这就导致了同一个包只能保存一个版本的代码,如果不同的项目依赖同一个第三方的包的不同版本,应该怎么解决呢?godepgodep 是一个Go语言官方提供的通过 vender 模式来管理第三方依赖的工具,类似的还有由社区维护的准官方包管理工具 dep。Go语言从 1.5 版本开始开始引入 vendor 模式,如果项目目录下有 vendor 目录,那么Go语言编译器会优先使用 vendor 内的包进行编译、测试等。 安装godep工具我们可以通过go get? 命令来获取 godep 工具。go get github.com/tools/godep 命令执行成功后会将 godep 工具的源码下载到 GOPATH 的 src 目录下对应的文件夹中,同时还会在 GOPATH 的 bin 目录下生成一个名为 godep.exe 的可执行文件,如下图所示。![]() 为了方便使用 godep 工具,我们需要将存放 godep.exe 文件的目录添加到环境变量 PATH 中。在系统变量中找到并选中“Path”一行,点击“编辑”按钮,在新弹出的窗口中点击“新建”,然后在最下面一行中填入对应的目录信息。确认无误后点击“确定”。 ![]() 环境变量设置的打开方式我们在《安装Go语言开发包》一节中已经介绍过了,这里不再赘述。 godep工具的基本命令完成上面的操作后,我们就可以在命令行窗口(CMD)中使用 godep 工具了,godep 支持的命令如下表所示:
使用 godep help [命令名称] 可以查看命令的帮助信息,如下所示。
C:UsersAdministrator>godep help go 使用godep工具执行godep save? 命令,会在当前目录中创建 Godeps 和 vender 两个文件夹。Godeps 文件夹下会生成一个 Godeps.json 文件,用来记录项目中所依赖的包信息;vender 目录则是用来保存当前项目所依赖的所有第三方包。![]() 生成的 Godeps.json 文件的结构如下所示:
{ 提示:当引用的第三方包要升级时,只需要修改 Godep.json 里面的依赖包的版本号,然后再次执行 godep save 命令即可。 godep 工具的主要功能就是控制Go语言程序编译时依赖包搜索路径的优先级。例如查找项目的某个依赖包,首先会在项目根目录下的 vender 文件夹中查找,如果没有找到就会去 GOAPTH/src 目录下查找。go modulego module 是Go语言从 1.11 版本之后官方推出的版本管理工具,并且从 Go1.13 版本开始,go module 成为了Go语言默认的依赖管理工具。GO111MODULE在Go语言 1.12 版本之前,要启用 go module 工具首先要设置环境变量 GO111MODULE,不过在Go语言 1.13 及以后的版本则不再需要设置环境变量。通过 GO111MODULE 可以开启或关闭 go module 工具。
Windows 下开启 GO111MODULE 的命令为: set?GO111MODULE=on 或者 set GO111MODULE=auto MacOS 或者 Linux 下开启 GO111MODULE?的命令为:export GO111MODULE=on 或者 export GO111MODULE=auto 在开启 GO111MODULE 之后就可以使用 go module 工具了,也就是说在以后的开发中就没有必要在 GOPATH 中创建项目了,并且还能够很好的管理项目依赖的第三方包信息。使用 go module 的 go mod init? 命令后会在当前目录下生成一个 go. mod 文件,并且在编译/运行当前目录下代码或者使用go get? 命令的时候会在当前目录下生成一个 go.sun 文件。![]() go.mod 文件记录了项目所有的依赖信息,其结构大致如下:
module main.go go.sum 文件则是用来记录每个依赖包的版本及哈希值,如下所示。
github.com/Knetic/govaluate v3.0.0+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0=
GOPROXYproxy 顾名思义就是代理服务器的意思。大家都知道,国内的网络有防火墙的存在,这导致有些Go语言的第三方包我们无法直接通过go get? 命令获取。GOPROXY 是Go语言官方提供的一种通过中间代理商来为用户提供包下载服务的方式。要使用 GOPROXY 只需要设置环境变量 GOPROXY 即可。目前公开的代理服务器的地址有:
Windows 下设置 GOPROXY 的命令为: go env -w GOPROXY=https://goproxy.cn,direct MacOS 或 Linux 下设置 GOPROXY 的命令为:export GOPROXY=https://goproxy.cn Go语言在 1.13 版本之后 GOPROXY 默认值为 https://proxy.golang.org,在国内可能会存在下载慢或者无法访问的情况,所以十分建议大家将 GOPROXY 设置为国内的 goproxy.cn。使用go get命令下载指定版本的依赖包执行go get? 命令,在下载依赖包的同时还可以指定依赖包的版本。
提示: (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |