Golang環境變量設置詳解

原創做者,公衆號【程序員讀書】,歡迎關注公衆號,轉載文章請註明出處哦。linux

不管你是使用Windows,Linux仍是Mac OS操做系統來開發Go應用程序,在安裝好Go安裝語言開發工具以後,都必須配置好Go語言開發所要求的 環境變量,纔算初步完成Go開發環境的搭建。android

但對於一些初學者來講,可能不太明白Go語言中經常使用的環境變量(Environment variables)的做用以及如何設置環境變量,今天咱們來說講。git

注意:Go提供的Windows操做系統安裝包(.msi後綴)安裝完成後,會自動配置幾個經常使用的環境變量。程序員

經常使用環境變量

Go語言中能夠設置的環境變量有不少,每一個環境變量都有其做用,不過不少咱們可能都用不到,通常須要了解也是最重要的有如下幾個:github

$ go env //打印Go全部默認環境變量
$ go env GOPATH //打印某個環境變量的值
複製代碼

GOROOT

環境變量GOROOT表示Go語言的安裝目錄。golang

Windows中,GOROOT的默認值是C:/go,而在Mac OSLinuxGOROOT的默認值是usr/loca/go,若是將Go安裝在其餘目錄中,而須要將GOROOT的值修改成對應的目錄。shell

另外,GOROOT/bin則包含Go爲咱們提供的工具鏈,所以,應該將GOROOT/bin配置到環境變量PATH中,方便咱們在全局中使用Go工具鏈。編程

Linux設置GOROOT演示
export GOROOT=~/go
export PATH=$PATH:$GOROOT/bin
複製代碼

GOPATH

注意,GOPATH的值不能與GOROOT相同。windows

環境變量GOPATH用於指定咱們的開發工做區(workspace),是存放源代碼、測試文件、庫靜態文件、可執行文件的工做。bash

類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
複製代碼

小結

環境變量的設置,能夠影響咱們開發和編譯項目的過程與結果,因此仍是頗有必要了解一下的。


你的關注,是我寫做路上最大的鼓勵!

相關文章
相關標籤/搜索