Page tree
Skip to end of metadata
Go to start of metadata

Go 1.16

默认启用 module 模式,无论当前目录(或父目录)是否包含 go.mod 文件。更准确的说,GO111MODULE环境变量默认为on,如果要改为之前的版本,可以手动设置为 auto。

默认情况下,构建相关的命令(go build, go test)不再修改go.mod 和 go.sum 文件;相关,如果缺少相关的依赖会直接报错(就跟 -mod=readonly 一样)。相关的依赖可以通过 go mod tidy 或 go get 来调整。


Go 1.14

官方推荐可以在生产环境中使用。

当main module中包含 vendor 目录,并且 go.mod 中指定了 go 1.14及以上,go 命令默认为 -mod=vendor。也可以指定 -mod=mod 来忽略掉 vendor目录。

当设置了 -mod=vendor (默认或明确指定),go 命令会检查 vendor/modules.txt 与 go.mod 文件是否一致。


Go 1.13

从Go 1.11开始,当工作目录在$GOPAH/src外时,只要当前目录或任意的父目录中包含go.mod文件,则会启用module模式。而如果位于 $GOPATH/src 内,为了保持兼容,则还是旧的GOPATH模式,即使存在go.mod文件。

从Go1.13开始,默认启用module模式(即只判断 go.mod 文件,而不再管工作目录)。

Go mod命令可以用来进行module相关的操作。不过需要注意的是 go modules 已经内建在所有的go命令中,而不仅仅是 go mod。日常操作中增加、移除、升级、降级依赖,都应该通过 go get 来完成。

为了更加细粒度的控制,go 命令继续支持 GO111MODULE 临时环境变量,可设置为 off、on、auto(默认)。

  • off:关闭module支持,从 vendor 和 GOPATH 中查找依赖;
  • on:只是用module,而不考虑 GOPATH;
  • auto/unset:根据当前工作目录或父目录中是否包含 go.mod;

在 module 模式中,GOPATH 不再定义构建过程中的导入关联,但它仍然存储着已下载的依赖(GOPATH/pkg/mod)和已安装的命令(GOPATH/bin)。

参考:https://golang.org/cmd/go/#hdr-Module_support




  • No labels
Write a comment...