Go Modules

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(提取)三步。

参考:

posted @ 2024-01-23 20:46  及第  阅读(5)  评论(0编辑  收藏  举报