<p align="right">2021年08月31日 13:54:49</p>
[TOC]
# 常用环境变量
## 环境变量查看
```
$ go env //打印Go所有默认环境变量
$ go env GOPATH //打印某个环境变量的值
```
## GOROOT
环境变量GOROOT标示Go语言的**安装目录**
| 操作系统 | GOROOT默认值 |
| --- | --- |
| Windows | C:/Go |
| Mac/Linux | /usr/local/go |
GOROOT/bin包含你Go提供的工具链,需要加入到环境变量中
Linux设置GOROOT演示
```
export GOROOT=~/go
export PATH=$PATH:$GOROOT/bin
```
## GOPATH
环境变量GOPATH用于指定我们的**开发工具区**,存放源代码、测试文件、库静态文件、可执行文件。
> 注意:GOPATH的值不能与GOROOT相同
****
| 操作系统 | GOPATH默认值 |
| --- | --- |
| Windows | %USERPROFILE%\\go |
| Mac/Linux | $home/go |
Linux设置GOPATH演示
```
export GOPATH=/opt/go
```
也可以设置多个工作区
```
export GOPATH=/opt/go;~/go
```
> 上面的代码表示我们指定两个工作区,不过当我们使用`go get`命令去获取远程库的时候,一般会安装到第一个工作区当中。
### GOPATH的子目录
GOPATH目录下的每个工作一般分为三个子目录:`src`,`pkg`,`bin`
| 目录 | 说明 |
| --- | --- |
| src | 开发的源代码文件,其下面的目录称为包 |
| pkg | 编译后的库静态文件 |
| bin | 源代码编译后的可执行文件 |
## GOBIN
环境变量`GOBIN`表示我们开发程序编译后二进制命令的安装目录。
> 使用`go install` 命令编译和打包应用程序时,该命令会将编译后二进制程序打包GOBIN目录,一般我们将GOBIN设置为`GOPATH/bin`目录。
Linux设置GOBIN演示
```
export GOBIN=$GOPATH/bin
```
# 交叉编译
交叉编译:在一个平台上就能生成在另外一个平台运行的可执行程序。Go语言进行交叉编译只需要设置GOOS和GOARCH这两个环境变量就可以了。
## GOOS和GOARCH的值的查看
GOOS的默认值是我们当前的操作系统, 例如windows,linux,注意mac os操作的上的值是darwin。 GOARCH则表示CPU架构,如386,amd64,arm等。
```
go env GOOS GOARCH
```
## GOOS和GOARCH的取值范围
GOOS和GOARCH的值成对出现,而且只能是下面列表对应的值。
```
$GOOS $GOARCH
android arm
darwin 386
darwin amd64
darwin arm
darwin arm64
dragonfly amd64
freebsd 386
freebsd amd64
freebsd arm
linux 386
linux amd64
linux arm
linux arm64
linux ppc64
linux ppc64le
linux mips
linux mipsle
linux mips64
linux mips64le
linux s390x
netbsd 386
netbsd amd64
netbsd arm
openbsd 386
openbsd amd64
openbsd arm
plan9 386
plan9 amd64
solaris amd64
windows 386
windows amd64
```
## 交叉编译实例
编译在64位Linux操作系统上运行的目标程序
```
$ GOOS=linux GOARCH=amd64 go build main.go
```
编译arm架构Android操作上的目标程序
```
$ GOOS=android GOARCH=arm GOARM=7 go build main.go
```
# 其他环境变量
## 通用环境变量
```
GCCGO
GOARCH
GOBIN
GOCACHE
GOFLAGS
GOOS
GOPATH
GOPROXY
GORACE
GOROOT
GOTMPDIR
```
## 和cgo一起使用的环境变量
```
CC
CGO_ENABLED
CGO_CFLAGS
CGO_CFLAGS_ALLOW
CGO_CFLAGS_DISALLOW
CGO_CPPFLAGS, CGO_CPPFLAGS_ALLOW, CGO_CPPFLAGS_DISALLOW
CGO_CXXFLAGS, CGO_CXXFLAGS_ALLOW, CGO_CXXFLAGS_DISALLOW
CGO_FFLAGS, CGO_FFLAGS_ALLOW, CGO_FFLAGS_DISALLOW
CGO_LDFLAGS, CGO_LDFLAGS_ALLOW, CGO_LDFLAGS_DISALLOW
CXX
PKG_CONFIG
AR
```
## 与系统架构体系相关的环境变量
```
GOARM
GO386
GOMIPS
GOMIPS64
```
## 专用的环境变量
```
GCCGOTOOLDIR
GOROOT_FINAL
GO_EXTLINK_ENABLED
GIT_ALLOW_PROTOCOL
```
## 其他
```
GOEXE
GOHOSTARCH
GOHOSTOS
GOMOD
GOTOOLDIR
```