从1.11开始go语言就增加了module的设计以处理第三方依赖问题,但是一直没有尝试,这段时间更新到1.12.5,觉得时候使用了。而且很多常见的第三方模块已经支持了。后面据说1.13将默认使用模块方式处理第三方依赖 。在1.11之前,所有的项目必须放置在GOPATH/src目录下,虽然管理起来也挺方便,但是与人协作的时候,都要手动把所有第三方库go get一遍。就这点不是很方便。如果项目引入的库越来越多,就会更加繁琐。
今天就找了以前的一个项目,试试更换到module模式能不能有丝滑般的过渡。都说需要设置环境变量GO111MODULE的值为on或者auto,可能是因为golang已经默认是自动模式,我没有设置这个环境变量,只将项目从GOPATH/src目录移动到其他目录就可以了。
执行命令:
go mod init test
项目中出现了go.mod文件,同事创建了模块test,在使用test下面的包时可以如调用包util,可以test/util,使用相对路径,就脱离了原来对路径的依赖了。
然后运行go build 开始自动安装依赖库。所有依赖库自动安装至GOPATH/pkg/mod目录下。
有些库可能需要通过特殊手段获得。特别是golang.org/x下的。
在使用过程中也发现一些问题
- 项目中使用了gin,执行go build的时候出现这个错误ambiguous import: found github.com/ugorji/go/codec in multiple module解决办法在go.mod文件末尾添加:
replace github.com/ugorji/go v1.1.4 => github.com/ugorji/go v0.0.0-20181022190402-e5e69e061d4f
- 如果提示某个目录被git占用,解除占用后,删除对应目录,重新构建
- 新克隆的项目可以使用
go mod tidy
更新依赖