1. 程式人生 > 程式設計 >Golang常用環境變數說明與設定詳解

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

小結

環境變數的設定,可以影響我們開發和編譯專案的過程與結果,所以還是很有必要了解一下的。

更多關於Golang常用環境變數說明與設定請檢視下面的相關連結