实用指南:golang包管理工具中 GOPATH 与 Go Modules 的区别总结

GOPATH 与 Go Modules 的区别总结

特性GOPATHGo Modules
项目位置必须在 $GOPATH/src
目录下
项目可以位于任何目录,完全不依赖于 GOPATH。
依赖管理方式通过 go get
下载到 **$GOPATH/src**
,无法管理版本
通过 **go.mod**
文件管理依赖和版本。
版本管理无法处理多个版本,所有工程共用一个版本协助为每个计划指定不同版本的依赖。
依赖安装目录下载的包直接放在 **$GOPATH/src**下载的包会缓存到 **$GOPATH/pkg/mod**
,并且不同工程共享缓存。
灵活性固定的目录结构,不易管理支撑灵活的项目结构,可以任意放置项目代码。
适合的场景小型项目或单个开发者使用大型项目、团队协作,支持多版本管理和模块化编写。

解释一下:

- **项目位置**
* **GOPATH模式下,不同项目需要指定不同的GOPATH,然后每个项目都要位于**`**$GOPATH/src**`**目录里面,不然没办法读取到这些包。如果不同项目共用同一个GOPATH,那么所有项目都得放到**`**$GOPATH/src**`**,会很不方便**
* **Go Modules相当于maven,会将所有依赖放到**`**$GOPATH/pkg/mod**`**中,项目的路径可以随便,没有任何要求**
- **依赖管理方式**
* **GOPATH模式下,go get不能指定版本号,每次都是默认从远程仓库下载最新的版本,这样会导致项目不同成员下载到不同的版本依赖**
* **Go Modules下 go get可以指定版本号**
- **版本管理**
* **OPATH模式下,如果一个包被下载多个版本,那么新的版本会覆盖掉旧的版本,所有项目共用一个版本**
* **Go Modules下可以允许依赖存在多个版本**
posted @ 2025-08-12 15:20  wzzkaifa  阅读(10)  评论(0)    收藏  举报