携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第2天,点击查看活动详情
在学习Go的过程的,环境变量那么多,就了解那几个,每次看go env
命令的时候,看到一堆变量,我就不能忍,瞧我这暴脾气,我今天就要好好搞一下他们!干!
通过go env
命令可以看到所有的环境变量,执行 go help environment
,可以看到左右命令的详解,下面我进行一一讲解:
- 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命令模式运行。
- GOMODCACHE
存储Go模块代码的文件目录,就像PHP语言包下载在vendor目录,如果没有设置,默认在$GOPATH/pkg/mod
。在同一台机器上开发多个go项目,该文件是共享的。这里需要注意的是,该文件及时使用强大的 rm -rf.
也无法删除,可以使用 go clean -modcache进行删除。
- GOINSECURE
在Go1.14版本中增加了的一个新的环境变量,通过逗号分隔,放入一些需要使用HTTP访问的域名,而不用校验CA证书。应为Go默认是以HTTPS形式拉取包。比如自建的私有仓库使用的HTTP方式,需要设置一下改环境变量。或者使用 go get -insecure xxx.com/test
- GONOPROXY
这里配置的是不走goproxy的代码地址,地址以逗号隔开,相当于跳过模块代理。
- GONOSUMDB
SUMDB是Go官方为了go modules 安全考虑设置的一个modules校验库,地址:sum.golang.org。
该参数就是设置不需要校验的仓库地址,以逗号隔开。
- GOPATH
以Go Modules模式下,模块包存储在GOPATH目录下的pkg/mod 子目录中。如果没有设置,则默认为用户主目录的go子目录。
- GOPRIVATE
该配置项可以跳过proxy server和校验检查,以私有仓库对待,支持以,
分隔或者|
分隔
- 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 回源到模块版本的源地址去抓取
- GOSUMDB
该参数可以配置你使用哪一个校验服务器和公匙来做校验,默认的校验地址是sum.golang.org
,如果将其设置为off
,或者使用go get
时启用-insecure
参数,将不会对依赖进行校验,将接受所有无法识别的模块;如果不想让某些依赖做校验可以设置GOPRIVATE
或 GONOSUMDB
环境变量,这两个环境变量上边已经提到过,这里不咋赘述。
- 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
.
- GOWORK
Go1.18增加的多模块工作区模式。Go通过go.work文件管理工作区,用于多模块开发工作。后边我会出一期Go多模块开发的文章。尽请期待
今天先到这里,大家有什么意见可以评论区留言欧!