03-go的包管理
在Go 1.11和1.12版本时就已经支持了对包管理功能,但还是相对有一些小的问题,不过在后续的版本中已经陆续解决。增加包管理是必然趋势,一门好的语言,不光要有好的生态,优美的语法,包管理也是必不可缺的功能,例如大名鼎鼎 npm,就连 C++ 也要推出包管理,好的包管理会让项目更加整洁,依赖关系也相对清晰。
回顾go的前世包管理
在go没有支持新的包管理之前,对于项目中的包管理方式是五花八门的,这种情况导致各个项目之间存在很多潜在问题,并且都需要手动下载,基本上有以下一些:
- 使用官方的方式也就是不借助其他工具,所有依赖包都需要自行手动下载。
- 使用的第三方库对于包管理是没有版本管理的,此时第三方进行不兼容更新,会导致很多错误。
- 多人协作开发项目,必须限定每个开发者在
$GOPATH/src
目录下安装依赖。 - 第三方包和自己项目的源码会混合,导致项目很混乱。
不合理的地方还有很多,不一一列举,好在这样的时代已经过去,迎接而来的是一片光明。
新的包管理
新的包管理解决了上面提到的大部分问题,有以下特点:
- 自动下载依赖包
- 项目不是必须存放在
GOPATH/src
目录下了 - 所有依赖会在一个叫go.mod文件内存放
- 所有第三方库会有相应的版本管理
- 对于一些已经转移的包