爲想嘗試 Go 的朋友開個頭,介紹環境的配置。語言的優缺點不在此展開。
因身邊多數使用 Win64 環境,以下無特殊說明均以 Win64 爲例,日後有需要再補充其他平臺部分。
1. Go
- 下載:https://golang.org/dl/ (out of wall)
- 版本:1.9+,一般下載最新版本即可
1.1 安裝
訪問官網下載頁面,獲取對應版本。不過如果你不懂得翻-牆,會發現訪問不了官網,因爲它在 Google 的服務器上。這點請自行解決。不過經過 PuTTY 和 iOS SDK 第三方下載被植入木馬的事件,勸各位還是努力到官網下載。
Win64 的安裝文件一般爲 go1.xx.y.windows-amd64.msi
,下載好後安裝,路徑默認或自定義,沒有強制要求,不要出現中文和空格,儘量短一些即可。個人路徑供參考: D:\Dev\Go
。
1.2 環境變量
安裝後設置環境變量,指定 官方工具包(及內置庫) 和 工作目錄。
以下設置均在:我的電腦(Win10 此電腦) > 右鍵菜單 > 屬性 > 高級系統設置 > 環境變量
, 如果變量存在就確認內容,不存在就新建。
1.2.1 GOROOT
指定 Go 的安裝目錄,並以此確定工具包和內置庫的位置。確保 GOROOT
指向 Go 的安裝目錄 (例: D:\Dev\Go
)。
1.2.2 GOPATH
指定 Go 的 workspace(工作目錄)。GOPATH
允許指定多個 workspace,中間以 ;
隔開(跟 PATH
類似,其他平臺下的分隔符是 :
)。可以在任意一個 workspace 下開發,但是 go get
和 go install
的包只會放在第一個目錄。當引用包的時候,會先查找 %GOROOT%\pkg
的語言內置包,再順序查找每個 workspace 的 src
目錄,找到就結束。
一般情況下,推薦設置兩個 workspace : 第一個存放下載的第三方依賴包,第二個存放本地開發的代碼,分開避免混淆。例:C:\Users\Jayce\go;E:\workspace\go
。
1.2.3 PATH
PATH
是系統自帶的執行路徑,所以我們不能覆蓋它,只能在後面追加。需要將GOROOT 的 bin 目錄 和 第一個 workspace 的 bin 目錄加入 PATH ,以調用 官方工具包 和 安裝的第三方工具。其中如果你檢查 GOROOT 的時候發現 GOROOT 已經配置好了,有可能 %GOROOT%\bin
也已經添加了,你可以複製到記事本里檢查一下。
假定兩個都沒有添加,那麼以上述 GOPATH
的配置爲例,則是 原來的PATH內容;%GOROOT%\bin;C:\Users\Jayce\go\bin
注:Win10 對 PATH 的管理進行了優化,不再是一長串用 ;
分隔的路徑,而是一個路徑的列表,追加時只需新建子項即可。
1.3 驗證
打開 cmd,然後按如下操作
1
2
3
4
5
|
# 查看安裝版本
go version
# 正常應該顯示你安裝的版本
# 找不到指令請檢查安裝 GOROOT 的安裝目錄是否正確 / PATH 裏是否包含了 %GOROOT%\bin
go version go1.10.1 windows/amd64
|
2. gcc 和 make
有時部分依賴包以 C 開發,需要用到 gcc 編譯;另外,爲簡化編譯流程,項目規模增大後會逐漸交由 make 管理編譯。兩個工具在 Linux 下一般自帶,或通過系統的包管理很輕易地安裝,Windows 下則要安裝 MinGW-w64 。注意必須是 MinGW-w64 。MinGW 不兼容 64 位系統,同時長期不更新;而 w64 可以同時兼容 32 和 64 位。
2.1 安裝
下載得到的是安裝器,在選擇版本後,會自動下載對應版本並安裝。建議不要改動任何選項,只需要確保 Architecture 對應你的計算機即可(Win64 選 x86_64)。
安裝路徑依然沒有強制要求,無中文和空格,儘量短即可。參考:D:\Dev\mingw-w64
。
2.2 創建 make 的軟鏈接
安裝完後進入 安裝目錄的 bin 目錄,可以看到大量的工具,其中有 gcc.exe
和 mingw32-make.exe
,沒有 make.exe
。其實 mingw32-make.exe
就是,但是用這個名字調用太長,也不利於其他工具用默認的名字調用,所以我們要創建一個名字叫 make.exe
的軟鏈。
首先用管理員權限打開 cmd (右鍵菜單 > 用管理員權限打開),然後按如下操作:
1
2
3
4
5
|
# 請修改路徑對應你的安裝目錄
C:\Windows\system32>cd /d D:\Dev\mingw-w64\bin
D:\Dev\mingw-w64\bin>mklink make.exe mingw32-make.exe
爲 make.exe <<===>> mingw32-make.exe 創建的符號鏈接
|
建議創建軟鏈之後就關掉管理員權限的 cmd,避免因權限過高造成不可恢復的誤操作。後續操作在普通權限下執行即可。
完成後你會看到 bin 目錄下多了一個 make.exe
文件,然後執行 dir make.exe
,會看到
1
2
|
D:\Dev\mingw-w64\bin>dir make.exe
2018/10/04 18:17 <SYMLINK> make.exe [mingw32-make.exe]
|
2.3 PATH 環境變量
跟 Go 安裝類似的, bin 目錄也要追加到 PATH 目錄的最後,詳細可以參考 1.2.3 Go 的 PATH 環境變量部分。
特別強調:mingw-w64 下面還有一套 mingw32,添加到 PATH 的是根目錄的 bin,不是 mingw32 下面的!!
1
2
3
4
5
|
mingw-w64
├── bin # 64位系統認準這個!!
├── mingw32
│ ├── bin # 不是這個
......
|
2.4 驗證
1
2
3
4
|
gcc --version
# 正常會輸出 gcc 的版本,64位:x86_64, 32位:i686; 注意區分
make -v
# 能調用就行,不需要留意位數
|
3. 項目包管理及編譯
3.0 預備知識:Go 的目錄結構與包管理
每個 workspace 下都有三個指定用途的目錄,用到的時候如果不存在,會自動創建:
1
2
3
|
├── bin # 存放 install 之後的可執行文件
├── pkg # 存放編譯之後鏈接之前的中間文件
└── src # 存放 包 的源文件
|
其中 go get
獲得的 src 和 go install
獲得的 bin ,會放在第一個 workspace 中,所以建議至少添加兩個 workspace,並在第二個進行本地開發,避免混淆。
Go 語言引用包時,需要在代碼開頭 import 對應包的路徑(非包名,雖然路徑的最後一層目錄往往跟包名一樣,但也可以不一樣):
1
2
3
4
|
import (
"../local/relative/path" // 相對路徑。不納入 workspace 的小項目允許。正規項目需要納入,會報錯!!
"github.com/urface/cli" // 全局路徑。
)
|
全局路徑的 import
- 先在
%GOROOT%\pkg
查找內置的包(已編譯,所以引用 pkg) - 再在每個 workspace 的 src 目錄查找
- 在 1.6 版本後新增了項目根目錄下的 vendor 目錄,可以通過依賴管理工具拷貝特定版本的依賴,方便鎖定依賴的版本,並隨項目源碼一起提交。
使用了 local import 的包,不能被別的包 import,所以在正式項目中基本是禁止使用的。那麼需要被引用的包只能存放在 src 或者 vendor 中。
跟 Java 相比最大的差別就是, 項目的根目錄不在 import 的搜索範圍內 。Java 項目內的包,包名(跟路徑對應)不包括項目名,從根目錄下開始算;Go 沒有項目本地包的概念,都是全局 import,包路徑從 src 下開始算,所以項目根目錄名也是包路徑的一部分。由此得出結論:
- Go 項目必須在 workspace 的 src 目錄下開發
- 根目錄 名字確定後就不能隨意更改 ,否則項目內的互相 import 都得改
3.1 包管理
有了上述知識準備,接下來的內容就容易理解了。
- git clone 必須在 (第二個) workspace 的 src 目錄進行 (後續要新建項目同理)。
- 項目名(例:myproj) 需要跟 import 路徑 (
import myproj/xxx/yyy
) 保持一致,新建項目時就要考慮,clone 之後不能修改目錄名。 - 推薦使用官方的依賴管理工具 dep,所有第三方依賴都會拷貝到 vendor 跟源碼一起管理,clone 後不需
go get
對應的依賴。
3.2 編譯
在確保做好包管理的基礎上,編譯就很簡單了,在根目錄打開 cmd:
1
|
go build
|
即可。
(後續項目複雜度增加後,編譯建議交給 make 管理。)
4. IDE
-
LiteIDE:LiteIDE is a simple, open source, cross-platform Go IDE
國人開發的開源跨平臺 IDE,簡單,免費,夠用。
-
GoLand:A Clever IDE to Go by JetBrains
IDE 名門 JetBrains 出品,口碑很好,就是要付費。
-
Visual Studio Code:Code Editing. Redefined
傳統軟件巨頭微軟擁抱開源之後的 開源 IDE ,熱度很高;並非專門爲 Go 設計,但提供相關插件。
視乎你更習慣哪個 IDE,看你自己喜歡。
5. 其他工具
- bindata:將資源文件編譯成 go 源碼,參與編譯。(類似 Android 下的 R.java)
- dep:Go 官方依賴管理工具,將指定版本的第三方依賴拷貝到 vendor 目錄,跟源碼一起管理。
參考:https://jaycechant.info/2018/setup-golang-env/