<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
```