配置 Golang 開發環境 go1.11以下版本

爲想嘗試 Go 的朋友開個頭,介紹環境的配置。語言的優缺點不在此展開。

因身邊多數使用 Win64 環境,以下無特殊說明均以 Win64 爲例,日後有需要再補充其他平臺部分。

1. Go

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

  1. 先在 %GOROOT%\pkg 查找內置的包(已編譯,所以引用 pkg)
  2. 再在每個 workspace 的 src 目錄查找
  3. 在 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/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章