一、GOPATH模式

1.1项目结构与依赖管理
GOPATH模式下,所有项目必须置于 $GOPATH/src 目录下,依赖的第三方库统一存储在$GOPATH/pkg 和 $GOPATH/bin 目录。这种设计导致不同项目共享同一依赖环境,难以管理多版本依赖。
1.2主要缺点
---路径限制:项目必须严格遵循GOPATH目录结构,无法灵活存放于任意位置。
---版本冲突:缺乏版本控制,依赖更新可能导致全局影响。(go get ... 不能指定版本)
---依赖冗余:所有项目共用同一依赖库,易造成pkg目录臃肿。
二、Go Module模式

2.1.核心改进
Go Module自1.11版本引入,1.14版本成熟,通过go.mod文件实现依赖管理,彻底摆脱GOPATH限制。
2.2关键特性
---独立依赖管理:每个项目拥有独立的go.mod文件,记录依赖名称、版本及哈希值(go.sum)-保证项目的完整性,支持项目存放于任意路径。
---语义化版本控制:支持精确指定依赖版本,通过go get或手动编辑go.mod升级/降级依赖。
---本地依赖处理:通过replace指令可临时替换远程依赖为本地路径,便于调试。
2.2环境变量
---打开Go Module的开关。
---GOPROXY,用于设置Go的模块代理,其作用是使Go在后续拉取模块版本时直接通过镜像网站
---GOSUNDB,用来校验模块版本,保证拉取模块版本数据未经过篡改。如果已经设置了GOPROXY,它就会默认代替成为校验模块版本。
---GONOPROXY/GONOSUNDB/GOPRIVATE,如果当前库是一个私有库,手动去导,不用设置GOPROXY去导入,只设置GONOPROXY一个即可。
2.4操作流程
---初始化模块:go mod init <module-name>创建go.mod文件。
--在该项目中创建源文件编写代码,如果源代码中依赖某个库,可以手动down(go get ...),也可以在go run时它会自动down。
---依赖重定向,如果以前的包要更新或弃用使用新的。go mod edit -replace=原包=新包,go mod文件就会发生更改: