初次接触go时,要配置go的sdk,然后就接触到gopath和gomodules的配置,且官方强烈推荐使用go的sdk版本>1.11。咱也弄不明白区别是啥,按照最新的版本下载就对了。
后面接触多了,使用了gin框架。看到了go.mod文件以及下面的go.sum。越发想弄明白这东西干嘛用的,为什么有的依赖包我下载不下来。网上搜了一些资料,给自己写个大白话文章作记录。
gopath:go刚推行的时候使用的,项目目录结构简单。一般有bin、package、src几个目录。
缺点:你的程序如果需要使用到第三方的代码库,你得去下载install,但是你install的时候没办法指定版本。而且最大的问题是同一个包在你本地只能存在一个版本。这就意味着:
1.你得不同项目都必须使用同一个第三包的版本。如果存在第三方包需要升级,你得考虑你得所有项目都能兼容。
2.好了,你本地项目没问题了,你把代码传上去了,当别人下载你得src源码时,别人下载的第三方包不一定是你期望的那个版本,很有可能你能跑起来的项目,别人完全跑不起来。(典型的 我本地没问题啊,是你的环境问题吧 - -!)
鉴于上面2个重要缺陷,go的官方也推出过一个版本管理方案:vendor。
简单来说vendor把你所有需要的依赖包都下载下来放到一个文件夹vendor里。当你项目上传时,必须把vendor文件夹也一并上传。这样别人下载项目时也能够下载到vendor的内容,而且每个项目都有自己的vendor文件夹。
问题确实被解决了,但是想想看每次都上传一大堆依赖东西这样太蠢了点...
我们急需一个类似maven的公共库,所有的第三方依赖大家都从公共库下载。
这时 就该gomodules发挥作用了。首先gomodules是在go1.11被推出的。真正完善的版本是1.13,建议大家都使用1.13之后的版本。为什么说gomodules能解决依赖版本问题呢?
go.mod文件:
第一行:项目的module名称
第二行:go的sdk版本
第三行:比较关键,项目依赖的所有第三方包的路径,以及版本号
通过go.mod,大家可以自行从镜像仓库(官方的或者代理的)下载项目所有需要的依赖包,并且能保证大家使用的版本都一致。
是不是挺简单的一件事儿呢。
多补充一点:
如果有要新依赖第三方的代码包,该如何向go.mod里添加呢?--直接在编辑器里import即可。或者使用命令编辑go.mod文件也行。
go.mod下面的go.sum是干嘛用的?--一般不用管,主要是针对go.mod的路径以及版本号和内容做的一个hash.防止下载的依赖包北篡改。
https://blog.csdn.net/y601500359/article/details/118990215
参考别人的文章,写的比我好。