Golang環境變量設置詳解
無論你是使用Windows,Linux還是Mac OS操作系統來開發Go應用程序,在安裝好Go安裝語言開發工具之後,都必須配置好Go語言開發所要求的 環境變量,纔算初步完成Go開發環境的搭建。
但對於一些初學者來說,可能不太明白Go語言中常用的環境變量(Environment variables)
的作用以及如何設置環境變量,今天我們來講講。
注意:Go提供的Windows操作系統安裝包(.msi後綴)安裝完成後,會自動配置幾個常用的環境變量。
常用環境變量
Go語言中可以設置的環境變量有很多,每個環境變量都有其作用,不過很多我們可能都用不到,一般需要了解也是最重要的有以下幾個:
$ go env //打印Go所有默認環境變量
$ go env GOPATH //打印某個環境變量的值
複製代碼
GOROOT
環境變量GOROOT
表示Go語言的安裝目錄。
在Windows
中,GOROOT
的默認值是C:/go
,而在Mac OS
或Linux
中GOROOT
的默認值是usr/loca/go
,如果將Go安裝在其他目錄中,而需要將GOROOT的值修改爲對應的目錄。
另外,GOROOT/bin
則包含Go爲我們提供的工具鏈,因此,應該將GOROOT/bin
配置到環境變量PATH中,方便我們在全局中使用Go工具鏈。
Linux設置GOROOT演示
export GOROOT=~/go
export PATH=$PATH:$GOROOT/bin
複製代碼
GOPATH
注意,
GOPATH
的值不能與GOROOT
相同。
環境變量GOPATH
用於指定我們的開發工作區(workspace),是存放源代碼、測試文件、庫靜態文件、可執行文件的工作。
在類Unix
(Mac OS或Linux)操作系統中GOPATH
的默認值是$home/go。而在Windows中GOPATH的默認值則爲%USERPROFILE%\go(比如在Admin用戶,其值爲C:\Users\Admin\go)。
當然,我們可以通過修改GOPATH來更換工作區,比如將工作設置opt/go
方式如下:
Linux設置GOPATH演示
export GOPATH=/opt/go
複製代碼
還有,可以在GOPATH中設置多個工作區,如:
export GOPATH=/opt/go;$home/go
複製代碼
GOPATH的子目錄
上面的代碼表示我們指定兩個工作區,不過當我們使用go get
命令去獲取遠程庫的時候,一般會安裝到第一個工作區當中。
按照Go開發規範,GOPATH目錄下的每個工作一般分爲三個子目錄:src
,pkg
,bin
,所以我們看到的每個工作區是這樣子的:
bin/
hello # 可執行文件
outyet # 可執行文件
src/
github.com/golang/example/
.git/
hello/
hello.go # 命令行代碼
outyet/
main.go # 命令行代碼
main_test.go # 測試代碼
stringutil/
reverse.go # 庫文件
reverse_test.go # 庫文件
golang.org/x/image/
.git/
bmp/
reader.go # 庫文件
writer.go # 庫文件
複製代碼
src
目錄放的是我們開發的源代碼文件,其下面對應的目錄稱爲包
,pkg
放的是編譯後的庫靜態文件,bin
放的是源代碼編譯後臺的可執行文件。
GOBIN
環境變量GOBIN
表示我們開發程序編譯後二進制命令的安裝目錄。
當我們使用go install
命令編譯和打包應用程序時,該命令會將編譯後二進制程序打包GOBIN目錄,一般我們將GOBIN設置爲GOPATH/bin
目錄。
Linux設置GOBIN演示
export GOBIN=$GOPATH/bin
複製代碼
上面的代碼中,我們都是使用export命令設置環境變量的,這樣設置只能在當前shell中有效,如果想一直有效,如在Linux中,則應該將環境變量添加到/etc/profile
等文件當中。
交叉編譯
什麼是交叉編譯?所謂的交叉編譯,是指在一個平臺上就能生成可以在另一個平臺運行的代碼,例如,我們可以32位的Windows操作系統開發環境上,生成可以在64位Linux操作系統上運行的二進制程序。
在其他編程語言中進行交叉編譯可能要藉助第三方工具,但在Go語言進行交叉編譯非常簡單,最簡單隻需要設置GOOS和GOARCH這兩個環境變量就可以了。
GOOS與GOARCH
GOOS的默認值是我們當前的操作系統, 如果windows,linux,注意mac os操作的上的值是darwin。 GOARCH則表示CPU架構,如386,amd64,arm等。
獲取GOOS和GOARCH的值
我們可以使用go env
命令獲取當前GOOS和GOARCH的值。
$ 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
複製代碼
環境變量列表
雖然我們一般雖然配置的環境變量就那麼幾個,但其實Go語言是提供了非常多的環境變量,讓我們可以自由地定製開發和編譯器行爲。
下面是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