這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
前段時間寫了好幾篇關於Go語言的文章,有入門的Go系統介紹,也有比較深入的網路代理程式分析實現,讀者們看了也給予了很多好評,這裡非常感謝。
有讀者來信(公眾號訊息)說能不能寫一篇關於Go語言環境的配置搭建,這樣對於想學Go語言的可以快速的配置起來一個環境。這個的確是我忽略了,按照我寫書的邏輯,也是先有環境搭建,才能有語言功能介紹,這個直接把Go語言的開發環境搭建等配置跳過去實在不應該,所以這篇特意針對Go語言的開發環境搭建、配置、編輯器選型、不同平台程式產生等做了詳細的介紹。
下載
要搭建Go語言開發環境,我們第一步要下載go的開發套件,目前最新穩定版本是v1.7.4。Go為我們所熟知的所有平台架構提供了開發套件,比如我們熟知的Linux、Mac和Windows,其他的還有FreeBSD等。
我們可以根據自己的機器作業系統選擇相應的開發套件,比如你的是Windows 64位的,就選擇windows-amd64的工具包;是Linux 32位的就選擇linux-386的工具包。可以自己查看下自己的作業系統,然後選擇,Mac的現在都是64位的,直接選擇就可以了。
開發套件又分為安裝版和壓縮版。安裝版是Mac和Windows特有的,他們的名字類似於:
- go1.7.4.darwin-amd64.pkg
- go1.7.4.windows-386.msi
- go1.7.4.windows-amd64.msi
安裝版,顧名思義,雙擊開啟會出現安裝嚮導,讓你選擇安裝的路徑,幫你設定好環境比安康等資訊,比較省事方便一些。
壓縮版的就是一個壓縮檔,可以解壓得到裡面的內容,他們的名字類似於:
- go1.7.4.darwin-amd64.tar.gz
- go1.7.4.linux-386.tar.gz
- go1.7.4.linux-amd64.tar.gz
- go1.7.4.windows-386.zip
- go1.7.4.windows-amd64.zip
壓縮版我們下載後需要解壓,然後自己移動到要存放的路徑下,並且配置環境變數等資訊,相比安裝版來說,比較複雜一些,手動設定的比較多。
根據自己的作業系統選擇後,就可以下載開發套件了,Go語言的官方下載地址是 https://golang.org/dl/ 可以開啟選擇版本下載,如果該頁面打不開,或者開啟了下載不了,可以使用鏡像網站 http://mirrors.flysnow.org/ ,開啟後搜尋或者找到Golang,選擇相應的版本下載,這個鏡像網站會同步更新官方版本,基本上都是最新版,可以放心使用。
Linux下安裝
我們以Ubuntu 64位為例進行示範,CentOS等其他Linux發行版大同小異。
下載go1.7.4.linux-amd64.tar.gz後,進行解壓,你可以採用內建的解壓軟體解壓,如果沒有可以在終端行使用tar命令列工具解壓,我們這裡選擇的安裝目錄是/usr/local/go,可以使用如下命令:
1 |
tar -C /usr/local -xzf go1.7.4.linux-amd64.tar.gz |
如果提示沒有許可權,在最前面加上sudo以root使用者的身份運行。運行後,在/usr/local/下就可以看到go目錄了。如果是自己用軟體解壓的,可以拷貝到/usr/local/go下,但是要保證你的go檔案夾下是bin、src、doc等目錄,不要go檔案夾下又是一個go檔案夾,這樣就雙重嵌套了。
然後就要配置環境變數了,Linux下又兩個檔案可以配置,其中/etc/profile是針對所有使用者都有效;$HOME/.profile是針對目前使用者有效,可以根據自己的情況選擇。
針對所有使用者的需要重啟電腦才可以生效;針對目前使用者的,在終端裡使用source命令載入這個$HOME/.profile即可生效。
使用文字編輯器比如VIM編輯他們中的任意一個檔案,在檔案的末尾添加如下配置儲存即可:
12 |
export GOROOT=/usr/local/goexport PATH=$PATH:$GOROOT/bin |
其中GOROOT環境變數表示我們GO的安裝目錄,這樣其他軟體比如我們使用的Go開發IDE就可以自動的找到我們的Go安裝目錄,達到自動設定Go SDK的目的。
第二句配置是把/usr/local/go/bin這個目錄加入到環境變數PATH裡,這樣我可以在終端裡直接輸入go等常用命令使用了,而不用再加上/usr/local/go/bin這一串絕對路徑,更簡潔方便。
以上配置好之後,我們開啟終端,屬於如下命令,就可以看到go的版本等資訊了。
12 |
➜ ~ go versiongo version go1.7.4 linux/amd64 |
這就說明我們已經安裝go成功了,如果提示go這個命令找不到,說明我們配置還不對,主要在PATH這個環境變數,仔細檢查,直到可以正常輸出為止。
Mac下安裝
Mac分為壓縮版和安裝版,他們都是64位的。壓縮版和Linux的大同小異,因為Mac和Linux都是基於Unix,終端這一塊基本上是相同的。
壓縮版解壓後,就可以和Linux一樣放到一個目錄下,這裡也以/usr/local/go/為例。在配置環境變數的時候,針對所有使用者和Linux是一樣的,都是/etc/profile這個檔案;針對目前使用者,Mac下是$HOME/.bash_profile,其他配置都一樣,包括編輯sudo許可權和生效方式,最後在終端裡測試:
12 |
➜ ~ go versiongo version go1.7.4 darwin/amd64 |
Mac安裝版下載後雙擊可以看到安裝介面,按照提示一步步選擇操作即可。安裝版預設安裝目錄是/usr/local/go,並且也會自動的把/usr/local/go/bin目錄加入到PATH環境變數中,重新開啟一個終端,就可以使用go version進行測試了,更快捷方便一些。
Windows下安裝
Windows也有壓縮版和安裝版,又分為32和64位以供選擇,不過目前大家都是64位,選擇這個更好一些。
Window的壓縮版是一個ZIP壓縮包,下載後使用winrar等軟體就可以解壓,解壓後要選擇一個存放目錄,比如c:\Go下,這個c:\Go就是Go的安裝目錄了,他裡面有bin、src、doc等目錄。
然後就是環境變數的配置,Window也和Linux一樣分為針對所有使用者的系統變數,和針對目前使用者的使用者變數設定,可以自行選擇,比如系統變數,針對所有使用者都有效。
以Window 7為例,右擊我的電腦->屬性會開啟系統控制台,然後在左側找到進階系統設定點擊開啟,會在彈出的介面最下方看到環境變數按鈕,點擊它,就可以看到環境變數配置介面了。上半部分是使用者變數配置,下半部分是系統變數配置。
我們在系統變數裡點擊建立,變數名輸入GOROOT,變數值是我們剛剛安裝的go路徑c:\Go,這樣就配置好了GO目錄的安裝路徑了。
然後修改PATH系統變數,在變數值裡添加%%GOROOT\bin路徑,和其他PATH變數以;(分號,Linux下是冒號)分割即可。這樣我們就可以在CMD裡直接輸入go命令使用了。
開啟我們的終端,輸入go version測試下,好了的話就可以看到輸出的資訊了。
Window的安裝版相比來說就比較簡單一些,雙擊就可以按照提示一步步安裝,預設安裝路徑是c:\Go,並且會配置好PATH環境變數,可以直接開啟CMD終端使用。
設定工作目錄
工作目錄就是我們用來存放開發的原始碼的地方,對應的也是Go裡的GOPATH這個環境變數。這個環境變數指定之後,我們編譯原始碼等產生的檔案都會放到這個目錄下,GOPATH環境變數的配置參考上面的安裝Go,配置到/etc/profile或者Windows下的系統變數裡。
這個工作目錄我們可以根據自己的設定指定,比如我的Mac在$HOME/code/go下,Window的可以放到d:\code\go下等。該目錄下有3個子目錄,他們分別是:
1234 |
.├── bin├── pkg└── src |
- bin檔案夾存放
go install命名產生的可執行檔,可以把$GOPATH/bin路徑加入到PATH環境變數裡,就和我們上面配置的$GOROOT/bin一樣,這樣就可以直接在終端裡使用我們go開發產生的程式了。
- pkg檔案夾是存在go編譯產生的檔案。
- src存放的是我們的go原始碼,不同工程項目的代碼以包名區分。
go項目工程結構
配置好工作目錄後,就可以編碼開發了,在這之前,我們看下go的通用項目結構,這裡的結構主要是原始碼相應地資源檔存放目錄結構。
我們知道原始碼都是存放在GOPATH的src目錄下,那麼多個多重專案的時候,怎麼區分呢?答案是通過包,使用包來組織我們的項目目錄結構。有過java開發的都知道,使用包進行組織代碼,包以網站網域名稱開頭就不會有重複,比如我的個人網站是flysnow.org,我就可以以·flysnow.org·的名字建立一個檔案夾,我自己的go項目都放在這個檔案夾裡,這樣就不會和其他人的項目衝突,包名也是唯一的。
如果沒有個人網域名稱,現在流行的做法是使用你個人的github.com,因為每個人的是唯一的,所以也不會有重複。
123456 |
src├── github.com├── golang.org├── gopkg.in├── qiniupkg.com└── sourcegraph.com |
如上,src目錄下跟著一個個網域名稱命名的檔案夾。再以github.com檔案夾為例,它裡面又是以github使用者名稱命名的檔案夾,用於儲存屬於這個github使用者編寫的go原始碼。
12345678910 |
src/github.com/spf13├── afero├── cast├── cobra├── fsync├── hugo├── jwalterweatherman├── nitro├── pflag└── viper |
那麼我們如何引用一個包呢,也就是go裡面的import。其實非常簡單,通過包路徑,包路徑就是從src目錄開始,逐級檔案夾的名字用/連起來就是我們需要的包名,比如:
123 |
import ("github.com/spf13/hugo/commands") |
Hello World
都準備好了,讓我們建立一個hello項目,測試一下。我的項目的路徑為src/flysnow.org/hello/。
123456789 |
package mainimport ("fmt")func main() {fmt.Println("Hello World")} |
Go版Hello World非常簡單。在src/flysnow.org/hello/目錄下運行go run main.go命令就可以看到列印的輸出Hello World,下面解釋下這段代碼。
- package 是一個關鍵字,定義一個包,和Java裡的package一樣,也是模組化的關鍵。
- main包是一個特殊的包名,它表示當前是一個可執行程式,而不是一個庫。
- import 也是一個關鍵字,表示要引入的包,和Java的import關鍵字一樣,引入後才可以使用它。
- fmt是一個包名,這裡表示要引入fmt這個包,這樣我們就可以使用它的函數了。
- main函數是主函數,表示程式執行的入口,Java也有同名函數,但是多了一個String[]類型的參數。
- Println是fmt包裡的函數,和Java裡的system.out.println作用類似,這裡輸出一段文字。
整段代碼非常簡潔,關鍵字、函數、包等和Java非常相似,不過注意,go是不需要以;(分號)結尾的。
安裝程式
安裝的意思,就是產生可執行檔程式,以供我們使用,為此go為我們提供了很方便的install命令,可以快速的把我們的程式安裝到$GOAPTH/bin目錄下。
1 |
go install flysnow.org/hello |
開啟終端,運行上面的命令即可,install後跟全路徑的包名。 然後我們在終端裡運行hello就看到列印的Hello World了。
跨平台編譯
以前運行和安裝,都是預設根據我們當前的機器產生的可執行檔,比如你的是Linux 64位,就會產生Linux 64位下的可執行檔,比如我的Mac,可以使用go env查看編譯環境,以下截取重要的部分。
12345678 |
➜ ~ go envGOARCH="amd64"GOEXE=""GOHOSTARCH="amd64"GOHOSTOS="darwin"GOOS="darwin"GOROOT="/usr/local/go"GOTOOLDIR="/usr/local/go/pkg/tool/darwin_amd64" |
注意裡面兩個重要的環境變數GOOS和GOARCH,其中GOOS指的是目標作業系統,它的可用值為:
- darwin
- freebsd
- linux
- windows
- android
- dragonfly
- netbsd
- openbsd
- plan9
- solaris
一共支援10中作業系統。GOARCH指的是目標處理器的架構,目前支援的有:
- arm
- arm64
- 386
- amd64
- ppc64
- ppc64le
- mips64
- mips64le
- s390x
一共支援9中處理器的架構,GOOS和GOARCH組合起來,支援產生的可執行程式種類很多,具體組合參考https://golang.org/doc/install/source#environment。如果我們要產生不同平台架構的可執行程式,只要改變這兩個環境變數就可以了,比如要產生linux 64位的程式,命令如下:
1 |
GOOS=linux GOARCH=amd64 go build flysnow.org/hello |
前面兩個賦值,是更改環境變數,這樣的好處是只針對本次運行有效,不會更改我們預設的配置。
擷取遠程包
go提供了一個擷取遠程包的工具go get,他需要一個完整的包名作為參數,只要這個完成的包名是可訪問的,就可以被擷取到,比如我們擷取一個CLI的開源庫:
1 |
go get -v github.com/spf13/cobra/cobra |
就可以下載這個庫到我們$GOPATH/src目錄下了,這樣我們就可以像匯入其他包一樣import了。
特別提醒,go get的本質是使用原始碼控制工具下載這些庫的原始碼,比如git,hg等,所以在使用之前必須確保安裝了這些原始碼版本控制工具。
Go編輯器推薦
Go採用的是UTF-8的文字檔存放原始碼,所以原則上你可以使用任何一款文字編輯器,這裡推薦幾款比較流行的。
對於新手來說,我推薦功能強大的IDE,功能強大,使用方便,比如jetbrains idea+golang外掛程式,上手容易,而且它家的IDE都一樣,會一個都會了,包括菜單、快速鍵等。值得高興的是jetbrains針對Go這門語言推出了專用IDE gogland,也足以證明go的流行以及jetbrains的重視。goglang地址為 https://www.jetbrains.com/go/,可以前往下載使用。
其次可以推薦微軟的VS Code以及Sublime Text,這兩款編輯器外掛程式強大,快速鍵方便,都對Go支援的很好,也擁有大量的粉絲。
最後推薦老牌的VIM,這個不用多介紹,大家都知道。
到這裡,整個Go開發環境就詳細介紹完了,不光有環境安裝搭建,還有目錄結構、常用命令使用等都進行了介紹,這篇文章看完後,已經入門了Go了,剩下的再看看Go的文法和庫,就可以很流暢的編寫Go程式了。