包管理模式有两种:
1.不使用第三方包,只使用内置包,这个时候go会在gopath下寻找包,需要设置GO111MODULE环境变量为off。
2.使用第三方包。GO111MODULE设置为on。这个时候GO使用go.mod和go.sum管理包。创建go.mod的命令为:go mod init 文件夹名
提示:
1.当使用go.mod模式后,在下载第三包后,系统将会自动添加包的依赖管理文件到go.mod文件,无需手动添加。
2.包下载命令(以下载gin包为例):go get -u github.com/gin - gonic/gin
3.window下更改GO111MODULE命令:go env -w GO111MODULE=on
4.当GO111MODULE=auto时,系统则自动判断包管理模式。
补充:使用go.mod的好处
-
依赖管理的精准性
- 版本控制精确化:在没有 Go 模块之前,Go 使用 GOPATH 来管理依赖,所有的依赖包都放在 GOPATH 下的
src目录中。这可能导致版本冲突,因为不同项目可能需要同一个库的不同版本。启用 Go 模块支持后,每个项目都有自己独立的go.mod和go.sum文件。go.mod文件记录了项目所依赖的模块及其版本,比如一个项目依赖github.com/gin - gonic/gin库,在go.mod文件中可以明确指定版本,如github.com/gin - gonic/gin v1.7.4。这样就可以精确控制每个依赖的版本,避免版本冲突。 - 依赖隔离增强:不同项目的依赖相互隔离。例如,项目 A 依赖
logrus库的v1.2.0版本,项目 B 依赖logrus库的v1.4.0版本。在 Go 模块支持下,两个项目的依赖可以独立管理,不会相互干扰。
- 版本控制精确化:在没有 Go 模块之前,Go 使用 GOPATH 来管理依赖,所有的依赖包都放在 GOPATH 下的
-
构建的可重复性
- 依赖下载一致性:
go.sum文件记录了项目所有依赖模块的哈希值。当在不同环境(如开发环境、测试环境、生产环境)构建项目时,Go 会根据go.sum文件中的哈希值来验证下载的依赖包是否完整和正确。例如,如果下载的github.com/pkg/errors库的哈希值与go.sum中记录的不一致,Go 就会发出警告或者拒绝构建,从而保证在任何环境下构建项目所使用的依赖都是一致的。 - 跨团队协作便利:在团队开发中,不同成员的开发环境可能不同。Go 模块可以确保每个成员构建项目时使用的依赖是相同的。当新成员加入项目时,只要根据
go.mod和go.sum文件进行依赖下载和安装,就能构建出和其他成员一致的项目,减少了因依赖差异导致的问题。
- 依赖下载一致性:
-
模块代理支持
- 加速依赖下载:Go 模块支持使用模块代理。模块代理是一种缓存依赖的服务器,它可以缓存已经下载过的依赖模块。当多个项目需要下载相同的依赖时,从模块代理获取可以大大加快下载速度。例如,公司内部可以搭建一个 Go 模块代理服务器,团队内所有项目都通过这个代理服务器下载依赖,减少了从远程仓库(如 GitHub)重复下载相同模块的时间。
- 解决网络问题:在一些网络环境不佳或者无法直接访问外部仓库的情况下,模块代理可以起到缓冲的作用。例如,开发环境处于一个有限制的网络中,无法直接访问某些国外的代码仓库,通过配置模块代理(如使用国内的代理服务器),可以顺利下载依赖模块,保证项目开发的正常进行。