开始跟着极客时间学习go语言课程,为了方便,一直在win10系统开发(老师是在Mac上),依赖管理这一章节卡了一小会。Glide虽然已经不再维护,官网文档也建议使用go mod,但是还是想学习一下glide。
首先在管理第三方包依赖的事情上,go自带的GOPATH和GOROOT有诸多缺憾,比如依赖查找和版本管理,因此go引入vendor路径来解决这个问题。
接下来就开干!
博主就依托极客时间的课程的进度,项目都是里面的。
一步一步来引入glide管理我们的依赖:
0、项目下目录结构,以及直接使用原始依赖管理
我的GOPATH定义在go_learnning目录下,如下图
项目目的是要引入老师在github中的一个concurrent_map的package,做一个小demo
测试程序remote_package_test.go:
package remote_package
import (
"testing"
cm "github.com/easierway/concurrent_map"
)
func TestConcurrentMap(t *testing.T) {
m := cm.CreateConcurrentMap(99)
m.Set(cm.StrKey("key"), 10)
t.Log(m.Get(cm.StrKey("key")))
}
控制台切到当前程序目录下,执行go get命令获取远程包到本地,此时%GOPATH%\src目录下多了本地依赖目录(注意:此时还未引入glide)github.com,里面就是程序需要导入的包
github.com/easierway/concurrent_map,这点可以参考Maven
运行test也是没问题的
1、使用Glide管理
官方文档介绍的安装过程
1)按照官方文档来,拉取glide源码并编译
clone成功后我们发现%GOPATH%\src下的github.com目录下多了Masterminds的源码目录,这就是glide的源码,按照官方文档我们要切到图中的glide目录下
由于我的go版本是1.16,大于1.5,所以不需要设置GO15VENDOREXPERIMENT=1的环境变量,1.5版本的需要手动设置下
接下来就是用make命令编译源码(Linux下按照源码编译安装软件的小伙伴都明白,make命令),但是win10中需要mingw32-make命令
window下需要安装mingw-w64,它的bin目录下有make命令
最好设置到环境变量中,这样就可以在当前glide目录下编译源码
没有报错说明编译成功!
2、安装glide
没有报错,此时%GOPATH%\bin目录下会生成glide.exe文件
同样道理,最好把这个可执行文件添加到环境变量中,这样就可以在你自己项目的目录(任意位置下)中使用glide.exe这个命令了
3、在自己项目目录下构建glide
执行glide.exe init来创建glide
这里有一个小坑,博主是在vscode中写程序的,终端执行后报错了,退出重启也不行
于是直接在cmd里操作下
接下来一步一步来,不必跟我一样,你开心就好
此时看到上图说明构建成功,同时我们的项目目录下面也产生了变化
项目下生成glide.yaml文件,打开这个文件有我们代码中需要的concurrent_map的包。
但是我们在第0步的时候已经在github.com目录下拉取过concurrent_map包,为了让glide来管理这个包,我们需要先删除掉这个concurrent_map包
此时,我们执行下test程序,肯定是找不到concurrent_map包
4、利用glide拉取远程包,并安装到本地
执行glide.exe get命令我们发现报错了,这时候我们去glide的源码包目录下的path目录中找到winbug.go文件,打开文件定位到CustomRename函数,替换这一行
cmd := exec.Command("cmd.exe", "/c", "move", o, n)为
cmd := exec.Command("cmd.exe", "/c", "xcopy /s/y", o, n+"\\")
然后重新安装下glide,这个过程就不赘述了(从第2步开始,再来一遍)
但是在init的时候可能会报如下的错
只需要删除项目目录下的glide.yaml文件即可
再次拉取concurrent_map包
如图所示,拉取成功了!
此时项目目录下多了vendor目录、glide.lock文件和glide.yaml文件
其中,拉取的concurrent_map包就安装在vendor目录下
5、执行测试
看到结果,没得问题!
至此,win10下从0搭建Glide彻底成功!其中博主遇到的小坑都一一点出来,相信大部分人都能够操作成功。
之前我也搭建过go mod,还是mod好用
继续go学习之路。。。