go env环境变量详解(一)

1,040 阅读3分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第2天,点击查看活动详情

在学习Go的过程的,环境变量那么多,就了解那几个,每次看go env命令的时候,看到一堆变量,我就不能忍,瞧我这暴脾气,我今天就要好好搞一下他们!干!

通过go env命令可以看到所有的环境变量,执行 go help environment,可以看到左右命令的详解,下面我进行一一讲解:

  1. GO111MODULE

此命令实际上就是控制go命令是通过GOPATH模式运行还是使用go包管理器形式运行;Go在2009年推出的时候,并没有包管理器这一说法,所有包的导入都会进入$GOPATH/src中;直到Go1.11才引入了Go模块。GO Modules方式通过存储在go.mod中标记依赖包版本。

此命令三种模式,分别是:

  • on : 强制Go使用Go Modules模式
  • off :强制使用GOPATH的模式
  • auto: 在Go1.15及更低版本中,如果在当前目录或者任何父目录中存在go.mod文件,则使用Go命令模式运行。
  1. GOMODCACHE

存储Go模块代码的文件目录,就像PHP语言包下载在vendor目录,如果没有设置,默认在$GOPATH/pkg/mod。在同一台机器上开发多个go项目,该文件是共享的。这里需要注意的是,该文件及时使用强大的 rm -rf.也无法删除,可以使用 go clean -modcache进行删除。

  1. GOINSECURE

在Go1.14版本中增加了的一个新的环境变量,通过逗号分隔,放入一些需要使用HTTP访问的域名,而不用校验CA证书。应为Go默认是以HTTPS形式拉取包。比如自建的私有仓库使用的HTTP方式,需要设置一下改环境变量。或者使用 go get -insecure xxx.com/test

  1. GONOPROXY

这里配置的是不走goproxy的代码地址,地址以逗号隔开,相当于跳过模块代理。

  1. GONOSUMDB

SUMDB是Go官方为了go modules 安全考虑设置的一个modules校验库,地址:sum.golang.org

该参数就是设置不需要校验的仓库地址,以逗号隔开。

  1. GOPATH

以Go Modules模式下,模块包存储在GOPATH目录下的pkg/mod 子目录中。如果没有设置,则默认为用户主目录的go子目录。

  1. GOPRIVATE

该配置项可以跳过proxy server和校验检查,以私有仓库对待,支持以,分隔或者|分隔

  1. GOPROXY

需要保证go的版本是Go1.13以上,

作用是使 Go 在拉取模块版本时能够脱离传统的 VCS 方式从镜像站点快速拉取。

//常用代理goproxy.cn、goproxy.io,默认值proxy.golang.org
go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.cn,direct

其中,direct的作用是:特殊指示符,用于指示 Go 回源到模块版本的源地址去抓取

  1. GOSUMDB

该参数可以配置你使用哪一个校验服务器和公匙来做校验,默认的校验地址是sum.golang.org,如果将其设置为off,或者使用go get时启用-insecure参数,将不会对依赖进行校验,将接受所有无法识别的模块;如果不想让某些依赖做校验可以设置GOPRIVATEGONOSUMDB 环境变量,这两个环境变量上边已经提到过,这里不咋赘述。

  1. GOVCS

Go 1.16引入GOVCS环境变量,该参数指定Go使用什么版本控制工具下载源代码。如果是从go proxy server获取源码,那么GOVCS将不起作用。因为go工具与go proxy server之间使用的是GOPROXY协议

GOVCS的默认值为public:git|hg,private:all,即对所有公共module允许采用git或hg获取源码,而对私有module则不限制版本控制工具的使用。

如果要不限制使用工具,设置:GOVCS=*:all,如果不通过任何版本控制工具拉取,那么可以设置:GOVS=*:off.

  1. GOWORK

Go1.18增加的多模块工作区模式。Go通过go.work文件管理工作区,用于多模块开发工作。后边我会出一期Go多模块开发的文章。尽请期待

今天先到这里,大家有什么意见可以评论区留言欧!