golang環境安裝和配置


go中環境安裝

前言

最近在工作中需要新配置go環境,每次都要去網上查找教程,浪費時間,那么就自己總結下。

下載安裝

linux
Golang官網下載地址:https://golang.org/dl/
1、選擇你要安裝的版本

File name    Kind    OS    Arch    Size    SHA256 Checksum
go1.13.8.src.tar.gz    Source            21MB    b13bf04633d4d8cf53226ebeaace8d4d2fd07ae6fa676d0844a688339debec34
go1.13.8.darwin-amd64.tar.gz    Archive    macOS    x86-64    116MB    e7bad54950e1d18c716ac9202b5406e7d4aca9aa4ca9e334a9742f75c2167a9c
go1.13.8.darwin-amd64.pkg    Installer    macOS    x86-64    116MB    358bf3bcae8eb6030b0d8551b9330ded4d98b56e80e8b7e85e1eb3672f63da99
go1.13.8.linux-386.tar.gz    Archive    Linux    x86    97MB    2305c1c46b3eaf574c7b03cfa6b167c199a2b52da85872317438c90074fdb46e
go1.13.8.linux-amd64.tar.gz    Archive    Linux    x86-64    115MB    0567734d558aef19112f2b2873caa0c600f1b4a5827930eb5a7f35235219e9d8
go1.13.8.linux-armv6l.tar.gz    Archive    Linux    ARMv6    94MB    75f590d8e048a97cbf8b09837b15b3e6b44e1374718a96a5c3a994843ef44a4d
go1.13.8.windows-386.zip    Archive    Windows    x86    109MB    00c765048392c78fd3681ea5279c408e21fc94f033a504a1158fc6279fb068e3
go1.13.8.windows-386.msi    Installer    Windows    x86    96MB    6dd6078c7e0e950a8ab4e4efd02072f83ae165f5a98319988ec3ef75ab9cab85
go1.13.8.windows-amd64.zip    Archive    Windows    x86-64    128MB    aaf0888907144ca7070c8dad03fcf1308f77a42d2f6e4d2a609e64e9ae73cf4f
go1.13.8.windows-amd64.msi    Installer    Windows    x86-64    112MB    e31ee61f7df18e45b1ab304536c96f9bd98298891bc09c8a1316dc6747bf7adc
Other Ports
go1.13.8.freebsd-386.tar.gz    Archive    FreeBSD    x86    97MB    5e02b9d3a3b5d7c61d43eea80b27875a9350472ffcb80c08fad857076d670d8b
go1.13.8.freebsd-amd64.tar.gz    Archive    FreeBSD    x86-64    115MB    d8ea8fa5f93ba66f1f011fe40706635a95d754704da68ec7c406ba52ed4ec93a
go1.13.8.linux-arm64.tar.gz    Archive    Linux    ARMv8    93MB    b46c0235054d0eb69a295a2634aec8a11c7ae19b3dc53556a626b89dc1f8cdb0
go1.13.8.linux-ppc64le.tar.gz    Archive    Linux    ppc64le    92MB    4c987b3969d33a93880a218064d2330d7f55c9b58698e78db6b56012058e91a9
go1.13.8.linux-s390x.tar.gz    Archive    Linux    s390x    97MB    994f961df0d7bdbfa6f7eed604539acf9159444dabdff3ce8e938d095d85f756

2、下載安裝包到本地

wget https://dl.google.com/go/go1.10.3.linux-amd64.tar.gz
3、執行tar解壓到/usr/loacl目錄下,得到go文件夾
tar -C /usr/local -zxvf go1.10.3.linux-amd64.tar.gz

 4、設置GOROOT,GOPATH,PATH

vim /etc/profile
export GOROOT=/usr/local/go  #設置為go安裝的路徑,有些安裝包會自動設置默認的goroot
export GOPATH=$HOME/go   #默認安裝包的路徑
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
source /etc/profile

環境中一些基本的配置項

GOROOT

golang的安裝路徑。 在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

go的工作目錄

需要注意的是,我們一般設置GOPATH的路徑和GOROOT的路徑不一樣。

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

在類Unix(Mac OS或Linux)操作系統中GOPATH的默認值是$home/go。而在Windows中GOPATH的默認值則 為%USERPROFILE%\go(比如在Admin用戶,其值為C:\Users\Admin\go)。

linux設置GOPATH
export GOPATH=/home/liz/go

GOPATH的工作目錄是可以設置多個的,比如

export GOPATH=/hone/liz/go:/home/liz/gowork 

但是GOPATH目錄里面必須包含三個子目錄

  • bin golang編譯可執行文件存放路徑,可自動生成。
  • src 源碼路徑。按照golang默認約定,go run,go install等命令的當前工作路徑(即在此路徑下執行上述命令)。
  • pkg golang編譯的.a中間文件存放路徑,可自動生成。

GOBIN

環境變量GOBIN表示我們開發程序編譯后二進制命令的安裝目錄。

當我們使用go install命令編譯和打包應用程序時,該命令會將編譯后二進制程序打包GOBIN目錄,一般 我們將GOBIN設置為GOPATH/bin目錄。

不允許設置多個路徑。可以為空。為空時則遵循“約定優於配置”原則,可執行文件放在各自GOPATH目錄的bin 文件夾中(前提是:package main的main函數文件不能直接放到GOPATH的src下面。

linux下面設置GOBIN
export GOBIN=$GOPATH/bin

上面的代碼中,我們都是使用export命令設置環境變量的,這樣設置只能在當前shell中有效,如果想一直 有效,如在Linux中,則應該將環境變量添加到/etc/profile等文件當中。

PATH

這個是環境變量的路徑,上面介紹的我們要將GOROOT下面的bin目錄,加入到PATH中,同時我們也要注意把 GOPATH下面的bin也放進去,當然GOBIN加進去也行,畢竟GOBIN也是指向這個目錄的,不然我們生成的可執 行文件文件就不能全局的被執行。

交叉編譯

什么是交叉編譯?所謂的交叉編譯,是指在一個平台上就能生成可以在另一個平台運行的代碼,例如,我們 可以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
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 build

這個命令主要用於編譯代碼。在包的編譯過程中,若有必要,會同時編譯與之相關聯的包。

  • 普通的包:go build之后不會產生任何的文件,如果想要得到可執行的文件,就需要使用go install
  • main包:go build之后會在本目錄生成可執行的文件。如果想要放到$GOPATH/bin中,則需要執行 go install或go build -o 路徑/a.exe
  • 項目里面有多個文件,我們只想執行其中的一個文件,就在go build后面加上文件的名,go build XX.go go build默認執行是包里面全部的文件
  • go build會忽略目錄下以“_”或“.”開頭的go文件。

參數介紹

  • -o 指定輸出的文件名,可以帶上路徑,例如 go build -o a/b/c
  • -i 安裝相應的包,編譯+go install
  • -a 更新全部已經是最新的包的,但是對標准包不適用
  • -n 把需要執行的編譯命令打印出來,但是不執行,這樣就可以很容易的知道底層是如何運行的
  • -p n 指定可以並行可運行的編譯數目,默認是CPU數目
  • -race 開啟編譯的時候自動檢測數據競爭的情況,目前只支持64位的機器
  • -v 打印出來我們正在編譯的包名
  • -work 打印出來編譯時候的臨時文件夾名稱,並且如果已經存在的話就不要刪除
  • -x 打印出來執行的命令,其實就是和-n的結果類似,只是這個會執行
  • -ccflags 'arg list' 傳遞參數給5c, 6c, 8c 調用
  • -compiler name 指定相應的編譯器,gccgo還是gc
  • -gccgoflags 'arg list' 傳遞參數給gccgo編譯連接調用
  • -gcflags 'arg list' 傳遞參數給5g, 6g, 8g 調用
  • -installsuffix suffix 為了和默認的安裝包區別開來,采用這個前綴來重新安裝那些依賴的包,-race的時候默認已經是-installsuffix race,大家可以通過-n命令來驗證
  • -ldflags 'flag list' 傳遞參數給5l, 6l, 8l 調用
  • -tags 'tag list' 設置在編譯的時候可以適配的那些tag,詳細的tag限制參考里面的 Build Constraints

go get

這個命令是用來動態獲取遠程代碼包的,目前支持的有BitBucket、GitHub、Google Code和Launchpad。這個命令在內部 實際上分成了兩步操作:第一步是下載源碼包,第二步是執行go install。

參數介紹:

  • -d 只下載不安裝
  • -f 只有在你包含了-u參數的時候才有效,不讓-u去驗證import中的每一個都已經獲取了,這對於本地fork的包特別有用
  • -fix 在獲取源碼之后先運行fix,然后再去做其他的事情
  • -t 同時也下載需要為運行測試所需要的包
  • -u 強制使用網絡去更新包和它的依賴包
  • -v 顯示執行的命令

go install

這個命令在內部實際上分成了兩步操作:第一步是生成結果文件(可執行文件或者.a包),第二步會把編譯好 的結果移到$GOPATH/pkg或者$GOPATH/bin。其中bin下面放的是可執行文件。

參數支持go build的編譯參數。

go run

編譯並運行Go程序

go test

執行這個命令,會自動讀取源碼目錄下面名為*_test.go的文件,生成並運行測試用的可執行文件

go clean

這個命令是用來移除當前源碼包和關聯源碼包里面編譯生成的文件。這些文件包括

_obj/            舊的object目錄,由Makefiles遺留
_test/           舊的test目錄,由Makefiles遺留
_testmain.go     舊的gotest文件,由Makefiles遺留
test.out         舊的test記錄,由Makefiles遺留
build.out        舊的test記錄,由Makefiles遺留
*.[568ao]        object文件,由Makefiles遺留

DIR(.exe)        由go build產生
DIR.test(.exe)   由go test -c產生
MAINFILE(.exe)   由go build MAINFILE.go產生
*.so             由 SWIG 產生 

參數介紹

  • -i 清除關聯的安裝的包和可運行文件,也就是通過go install安裝的文件
  • -n 把需要執行的清除命令打印出來,但是不執行,這樣就可以很容易的知道底層是如何運行的
  • -r 循環的清除在import中引入的包
  • -x 打印出來執行的詳細命令,其實就是-n打印的執行版本

go generate

go generate命令是go 1.4版本里面新添加的一個命令,當運行go generate時,它將 掃描與當前包相關的源代碼文件,找出所有包含"//go:generate"的特殊注釋,提取並執 行該特殊注釋后面的命令,命令為可執行程序。有一點我們需要注意,這些命令是明確的, 沒有任何的依賴在里面。

需要注意的點:

  • 該特殊注釋必須在.go源碼文件中。
  • 每個源碼文件可以包含多個generate特殊注釋時。
  • 顯示運行go generate命令時,才會執行特殊注釋后面的命令。
  • 命令串行執行的,如果出錯,就終止后面的執行。
  • 特殊注釋必須以"//go:generate"開頭,雙斜線后面沒有空格。

命令

go generate [-run regexp] [-n] [-v] [-x] [build flags] [file.go... | packages] 
  • -run 正則表達式匹配命令行,僅執行匹配的命令
  • -v 輸出被處理的包名和源文件名
  • -n 顯示不執行命令
  • -x 顯示並執行命令

比如:

package main

import "fmt"

//go:generate echo hello
//go:generate go run main.go
//go:generate  echo file=$GOFILE pkg=$GOPACKAGE
func main() {
    fmt.Println("main func")
}
輸出
$ go generate 
hello
main func
file=main.go pkg=main

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM