主題 達人專欄

Golang 入門!強迫症患者會喜歡的程式語言

解凍豬腳 | 2021-09-01 19:15:01 | 巴幣 12394 | 人氣 2490

 
本系列適合已經具備一定程式語言基礎的人閱覽。

最近有點忙呀,搞了一些想寫的小專案。想起自己 2018 年開始接觸 Golang 以後,隨即棄用了本來蠻喜歡的 Python,畢竟我平常會用 Python 做的事情,Golang 也都可以輕易做到,而且執行效能還更好。雖然還不能算是把這語言運用得非常精熟,但三年來斷斷續續寫了一些自用的簡單小東西,真心覺得像 Golang 這麼棒的程式語言,大家都該來學著用看看。


► Golang 語言簡介

Go(或稱 Golang),是 Google 的團隊在 2009 年開發(並且持續更新至今)的靜態強型別程式語言。Golang 本身是一種編譯語言,可以直接把程式原始碼編譯成原生的 PE 格式,不需要像 Java 或 C# 一樣仰賴 JRE 或 .NET Framework 的環境來執行,使得 Golang 可以達到接近 C 語言的高效能。

基於其設計模式自帶的優勢,Golang 可以用極低的成本讓函式異步執行——你可以把這句話粗略解釋為「Golang 可以用很少的資源去驅動多個執行緒,平行處理多項工作」——也因此 Golang 很適合用來架設伺服器後端的服務,同一時間處理大量的連線請求。

除此之外,Golang 也同時支援動態陣列、靜態陣列、指標操作、垃圾回收(GC)、雜湊表等等功能,現代的程式語言該有的東西都支援得算是很齊全(呃,除了泛型)。

Golang 在某些地方還有著近乎執著的堅持,例如:
1. 你不能夠宣告了變數卻沒用到
2. 你不能夠引用了函式庫卻沒用到
3. 左大括號不可以獨立成一行(我剛好就是屬於這一教派的)

包括錯誤處理、變數命名規範等等在內,我們可以從各個環節感受到 Golang 的設計團隊除了希望使用者寫出來的 code 看起來易讀又優雅以外,某種程度上也要求了使用者在開發程式的時候必須清楚地掌握每一句程式碼、每一個變數有什麼用,而不是以「能跑就好」的心態隨意找個堪用的方法呼攏過去,可以說它是有強迫症的語言。

由於 Golang 本身對開發者有著種種要求,這導致了 Golang 的門檻也相對於其他語言還要來得更高。根據我這幾年接觸不同語言的經驗來看,如果你是個完全沒有程式語言基礎的初學者,我個人不建議選用 Golang 作為首次接觸的程式語言;相反地,如果你已經接觸過至少兩種程式語言,也對於迴圈、陣列、字串、函式、物件導向程式設計等基礎觀念都有一定程度的掌握,那麼用 Golang 來開發一些工具或服務都是不錯的選擇。


► 開發環境準備和注意事項

首先到官方網站按照你的作業系統下載 Go 的安裝檔,安裝好開發 Golang 的環境。在你安裝 Go 的時候選擇的路徑,就被稱為 GOROOT(Go 的根目錄)。

安裝好之後要是你想用系統內建的記事本來寫 code 也行啦,只是我相信沒有人想這麼做。由於我平常開發的時候不喜歡安裝太多種笨重的專用 IDE,我個人會推薦萬用的 Visual Studio Code 作為撰寫 Golang 原始碼的編輯器。

下一步就是安裝讓 VS Code 支援 Golang 專用的延伸模組。打開 VS Code,用快捷鍵 Ctrl+Shift+X 打開延伸模組頁面,搜尋「Go」來安裝,注意不要安裝成「Go Nightly」這套,Nightly 是最新的測試用版本,因為沒有經過長期測試,可能會有部分功能不穩定的情況。


安裝 VS Code 的 Go 延伸模組之後,像是自動排版、自動完成之類的常用功能也就都有了。

接下來介紹一下剛才提到的 GOROOT 吧。假設你的 GOROOT 位置是 C:\Go\,那麼你會看到 C:\Go\src\ 資料夾裡面裝有 Golang 預設提供給你的官方函式庫,包括 fmt、time、net……等等。當你用 Golang 寫程式時引用了函式庫,Golang 的編譯器就會自動從這裡優先找,從這裡找不到的話就會往 GOPATH 底下的 src 資料夾找。

那麼 GOPATH 又是什麼呢?你可以把 GOPATH 理解為「使用者自己的工作區」,這底下的 src 資料夾除了可以用來放你自己寫的專案以外,從 GitHub 等地方下載下來的第三方函式庫也會放在這底下的 src 資料夾裡面。GOPATH 的位置預設會在 %USERPROFILE%\Go,像我的 GOPATH 就是 C:\users\johnn\go,其中 johnn 是我電腦的使用者名稱。

你可以在 cmd 或是 PowerShell 上面使用像是這樣的指令來修改自己的 GOPATH:
go env -w GOPATH="D:\MyGOPATH"


► 測試你的 Go 開發環境

我們可以自己找個喜歡的地方創設專案資料夾,比如說取名叫做 test,然後在裡面新增一個檔案 main.go:


接下來用 VS Code 打開這個 test 資料夾——注意!是打開資料夾而不是只有打開檔案,這樣編譯器才可以讀到整個專案資料夾的完整內容,日後開發時也能避免一些不必要的麻煩——我們可以從功能列的「檔案 > 開啟資料夾…」(File > Open folder…)來選擇 test 資料夾並開啟。



試著在 main.go 裡面寫上基本的 Hello world:

package main

import "fmt"

func main() {
    fmt.Println("Hello, world!")
}

Ctrl+S 儲存檔案,接著用 [Ctrl] + [~] 快捷鍵打開終端機(terminal),就會顯示出 cmd(或 PowerShell)的區域,讓你可以直接在上面用 DOS 模式執行指令。

一般嵌在 VS Code 上面的 terminal 起始位置會在你目前用 VS Code 開啟的資料夾,所以你會看見下圖在打開 PowerShell 之後命令列已經在 D:\test 底下,而不需要再另外使用 cd 指令移動,這也是建議直接打開資料夾而不是單一檔案的原因。

試著執行:
go run main.go

我們會看到程式正常地被編譯並執行,這也就代表你的開發環境已經初步建立完畢:


go run 的指令用來編譯並執行某個檔案,通常會在系統暫存區 %TEMP% 底下自動產生一個 go-build 開頭名稱的資料夾,然後把編譯好的程式放在那裡面執行。如果你希望把編譯好的 exe 執行檔留下來,那麼只要改用「go build main.go」指令,編譯好的 exe 檔就會留在你的專案資料夾裡面。

有的時候我們專案裡不只會有一個原始碼檔案,那麼我們可以用一個半形的句號「.」來代表資料夾底下的所有檔案,也就是說直接執行「go run . 」就可以了,「go build . 」也同理。


► 無法正常編譯,怎麼辦?

通常現在的 Golang 安裝好就不需要再手動設定額外的東西了,不過為求謹慎,還是在這裡講一下環境變數有問題的時候如何排除吧。

如果出現了「無法辨識 'go' 詞彙是否為 Cmdlet、函數、指令檔或可執行程式的名稱。」之類的訊息,那就代表系統沒有抓到 go 的核心執行檔 go.exe,你可以用 Windows+R 的快捷鍵,輸入 control 叫出控制台,找到「系統 > 進階系統設定 > 進階 > 環境變數 > 系統變數」來確認 GOROOT 底下的 bin 資料夾是不是在 Path 裡面:





因為當我們執行「go run main.go」的時候,實際上系統是從環境變數的 Path 列表找到 go.exe 來傳入 run main.go 的參數,在我的電腦上這整句指令就相當於:

C:\Go\bin\go.exe run main.go

所以如果你沒有辦法在 Path 列表裡面找到那一個 bin 資料夾,那麼你可以自己新增,然後重新開機讓它生效,這樣應該就 OK 了。



第一篇就先簡單介紹到建立好開發的環境為止吧,畢竟再講下去就要把套件管理一口氣講完了,之後再來繼續分享使用 Golang 開發的步驟跟注意事項。

縮圖素材原作者:Renée French(CC BY-SA 3.0)
送禮物贊助創作者 !
80
留言

創作回應

小青蛙
(其實去年通識有選過一學期的Python啦
2021-09-03 00:10:32
LIghtAlaRain
可惡的左大括號不獨立邪教 !!!
2021-09-03 12:52:23
解凍豬腳
異教徒……到處都是異教徒 [e23]
2021-09-03 18:45:03
初音才不是軟體
我寫 C++ 都用 Google 風格的自動排版 看來我適合這語言
另外 ~ 不是要按 shift ㄇ 我看 vscode 裡面也是寫 Ctrl + ` ㄚ?
2021-09-03 23:43:45
解凍豬腳
你是說叫出 terminal 的快捷鍵嗎
預設就是 Ctrl + ` 了吧,還要加 Shift 的話可能是有調整到什麼設定
2021-09-03 23:45:17
初音才不是軟體
我又來了
我想請問有沒有什麼推薦的入門書籍
我覺得官網的教學沒有很好懂@@
(我會Python跟C++)
2021-09-04 21:52:07
解凍豬腳
原則上我不會建議去買書回來看(我自己買回來的程式語言相關的書可能不到 3 本),而且不負責任的數據表明有 99% 的人買了書以後會把它放在架子上面長灰塵

絕大多數有用的資源都可以直接從網路上 Google 到,甚至會比書本的內容還會有用,因為你遇上的可能會是預期之外的問題,不見得會被編在別人的書本裡面

至於官網的話,那邊大部分是函式的各種定義跟用法的文件,它的性質比較像是「需要的時候才去查來看」的東西,就像正常人不會拿英文字典來精進英文能力一樣

個人會建議你先試著把你曾經寫過的小東西拿去用 Golang 重做一次,這樣就會慢慢熟悉什麼是 package、什麼是 module,以及 slice(動態長度的 array)、struct、for、switch 等等的功能要怎麼用

我覺得最重要是搜尋的時候要用對關鍵字,比如說你現在有一個 slice,你想要把它裡面的每一個元素都取出來做一次某種操作,那你的關鍵字可能就會是 golang slice iterate 或是 golang slice for each

通常你會在 Google 搜尋結果看到很多來自 Stack Overflow 的網頁,那邊的網友給的東西應該可以解決一般人八成以上的疑問
2021-09-05 06:52:11
初音才不是軟體
好詳細的回答,謝謝豬腳
了解了,就是直接實作,不會的就查
2021-09-05 10:28:27

相關創作

更多創作