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项目,该文件是共享的。这里需要注意的是,该文件只能使用go clean -modcache 删除,除此之外 rm -rf.也无法删除
GOINSECURE
在Go1.14版本中增加了的一个新的环境变量,通过逗号分隔,放入一些需要使用HTTP访问的域名,而不用校验CA证书。应为Go默认是以HTTPS形式拉取包。比如自建的私有仓库使用的HTTP方式,需要设置一下改环境变量。或者使用 go get -insecure xxx.com/test
GOPROXY
需要保证go的版本是Go1.13以上,
作用是使 Go 在拉取模块版本时能够脱离传统的 VCS 方式从镜像站点快速拉取。
ini
复制代码
//常用代理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 环境变量
GONOPROXY
这里配置的是不走goproxy的代码地址,地址以逗号隔开,相当于跳过模块代理。
GONOSUMDB
SUMDB是Go官方为了go modules 安全考虑设置的一个modules校验库,默认地址:sum.golang.org,不过现在这个地址被墙掉了,设置国内的加速地址Go 国内加速:解决 GOSUMDB sum.golang.org 连接超时 | Go 技术论坛 (learnku.com)
该参数就是设置不需要校验的仓库地址,以逗号隔开。
GOPATH
以Go Modules模式下,模块包存储在GOPATH目录下的pkg/mod 子目录中。如果没有设置,则默认为用户主目录的go子目录。
GOPRIVATE
该配置项可以跳过proxy server和校验检查,以私有仓库对待,支持以,分隔或者|分隔
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文件管理工作区,用于多模块开发工作。
GCCGO
gccgo 属于 gcc 编译器集合,是 gcc 针对go 语言的前端实现;gccgo 的编译速度比gc较慢一点,但是可以生成更优的代码,因此程序执行速度会更快。
golang 的默认编译器是 gc, gc 编译器已支持主流的处理器,而 gccgo 也对 gc 不支持的处理器进行了支持测试;
通过Go正式版本安装的go命令已经可以支持 gccgo,需要使用 -compiler选项:go build -compiler=gccgo 。
如果需要更好编译优化,或者是使用 gc 所不支持的处理器或操作系统,gccgo 可能是一个更好的选择。
GOARCH
为其编译代码的架构或处理器。例如 amd64、386、arm、ppc64.通常与GOOS搭配使用,实现交叉编译,在不同平台运行代码,如:Linux、Windows、Mac
GOOS
默认是我们当前开发环境的操作系统,例如:Linux、Windows、Mac;需要注意的是Mac默认操作系统该变量的值是darwin,跟GOARCH一起使用,进行代码交叉编译。例如编译Mac代码:
go
复制代码
//1.windows下编译Mac
//CGO_ENABLED 表示CGO禁用,交叉编译中不能使用CGO的.因为CGO不支持交叉编译。
//当我们使用了CGO时,要想实现跨平台编译,同时需要让C/C++代码也支持跨平台。
//如何实现CGO跨平台编译,网上都有相应解决方案
SET CGO_ENABLED=0
//mac 对应 darwin
SET GOOS=darwin
//目标平台的体系架构,目前市面上的个人电脑一般都是amd64架构的
SET GOARCH=amd64
go build main.go
//2.Mac下编译Windows、Linux
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build main.go
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build main.go
CGO_ENABLED
CGO_ENABLED是用来控制golang 编译期间是否支持调用 cgo 命令的开关,其值为1或0,默认情况下值为1
当CGO_ENABLED=1,进行编译时会将文件中引用libc的库(比如常用的net包),以动态链接的方式生成目标文件。
当CGO_ENABLED=0,进行编译时则会把在目标文件中未定义的符号(外部函数)一起链接到可执行文件中。(作者也没有搞明白这句话的意思,有哪位大佬可以给我科普下)
GOBIN
该环境变量存放go install编译打包后的二进制文件,默认是在$GOPATH/bin目录下。
GOCACHE
通过go build产生的缓存,这可以加快编译的速度,可以通过go clean -cache来清除编译缓存
GOMODCACHE
go命令存储下载模块的目录
GODEBUG
启用各种调试工具,它的格式是key=value格式已逗号分隔开,具体详情可以执行go doc runtime,查看命令详情
GOENV
go环境变量配置文件的位置。不能用go env -w来设置该环境变量。
GOFLAGS
GOFLAGS是个"-flag=value"的命令行参数列表,当执行go命令时,默认会添加这个环境变量里设置的参数。
例如使用vendor 模式管理Go的mod,可以设置命令:GOFLAGS=-mod=vendor,但是该方式不推荐使用