golang包管理工具中 GOPATH 与 Go Modules 的区别总结

GOPATH 与 Go Modules 的区别总结

特性 GOPATH Go 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下可以允许依赖存在多个版本**
相关推荐
ttwuai20 分钟前
Cursor 生成 CRUD 后,Go 后台接口别只测 200:JWT、RBAC 和 tenant_id 怎么验
开发语言·后端·golang
microrain8 小时前
从硬编码到热插拔:SagooIoT插件架构如何打破物联网平台的扩展瓶颈
物联网·golang·开源·sagooiot
geovindu9 小时前
go:Backtracking Algorithm
开发语言·后端·算法·golang·回溯算法
qq_452396239 小时前
第六篇:《并发编程核心:Goroutine 与 Channel》
golang
llwszx10 小时前
【Java/Go后端手撸原生Agent(第五篇):多工具并行调用 + BashTool执行引擎 + Judge证据链升级】
java·后端·golang·状态机·pydantic·agnet·llm-as-judge
FfHUCisI10 小时前
Go语言程序结构 —— 变量、声明与零值机制
golang
超人不会飞_Jay11 小时前
Go课程2
开发语言·后端·golang
晴空了无痕1 天前
从 Go 基础到 K8s:一条可落地的 Go 服务端成长路线
开发语言·后端·golang·kubernetes
qq_452396231 天前
第五篇:《接口与错误处理:Go 的哲学》
开发语言·后端·golang
布朗克1681 天前
Go 入门到精通-29-测试与基准
开发语言·后端·golang·测试与基准