Go Modules于1.11发布,自1.14之后推荐在生产中使用,其替代了传统的GOPATH模式,作为go的依赖管理工具。
认识GOPATH
GOPATH目录下一共包含了三个子目录,分别是:
- bin:存储所编译生成的二进制文件
- pkg:存储预编译的目标文件,以加快程序的后续编译速度
- src:存储所有.go文件或源代码。在编写 Go 应用程序、程序包和库时,一般会以
$GOPATH/src/{$
package path}路径进行存放
但由于GOPATH模式没有版本控制的概念,遂被Go Modules替代。
Go Modules
环境变量
- GO111MODULE:开启Go Modules
- GOPROXY:代理镜像站点
- GOSUMDB:模块版本校验。保证拉取到的模块版本数据未经过篡改
- GOPRIVATE:作为 GONOPROXY 和 GONOSUMDB 的默认值,定义私有模块,所设置的域名将不经过 GOPROXY 和 GOSUMDB
go.mod
module gxyan.com/hello
go 1.16
require (
google.golang.org/grpc v1.38.0
google.golang.org/protobuf v1.26.0
)
replace google.golang.org/grpc v1.38.0 => google.golang.org/grpc v1.32.0
- module:定义当前项目的模块路径
- go:标识当前模块的 Go 语言版本
- require:设置一个特定的模块版本
- exclude:从使用中排除一个特定的模块版本
- replace:将一个模块版本或路径替换为另外一个模块版本或路径
第一次拉取模块依赖后,Go会生成一个go.sum
文件,其详细罗列了当前项目直接或间接依赖的所有模块版本,并写明了这些模块版本的 SHA-256 哈希值以备 Go 在今后的操作中保证项目所依赖的这些模块版本不会被篡改。
go get拉取依赖时分为finding(发现)、downloading(下载)以及 extracting(提取)三步。
参考:
标签:GOPATH,模块,Modules,go,版本,Go From: https://www.cnblogs.com/gxyan/p/17983404