0%

【學習筆記】Golang 入門:環境建置與開發工具

公司目前在架構規劃中,App API 層傾向使用 Go 語言,相較於 Rust學習曲線較高,Go 在高並發處理和資料串流中繼上同樣有優勢,語法也比較直覺,如果本來就有 TypeScript 背景,上手門檻相對較低。

這系列筆記預計以 《Golang 打造 Web 應用程式》 搭配 《GOを早く学ぶ:完全チュートリアル》 入門影片,一邊實作一邊整理重點,當作日後查詢用的學習筆記。


Why Go?

Golang(Go Language)是 Google 在 2009 年推出的開源程式語言,設計目標很單純:語法簡潔、高效能、高並發、好維護。目前廣泛應用在後端服務、雲端平台、DevOps 工具(如 Docker、Kubernetes)等領域。

從語言特性來看,Go 具有:

  • Statically Typed / Strongly Typed:靜態、強型別語言,編譯期就會進行型別檢查
  • Compiled & Fast Compile Time:編譯型語言,編譯速度快,可以直接產生可執行的二進位檔,部署流程單純
  • Built-in Concurrency:內建並發模型,透過 Goroutines(Go 例程)和 Channels,容易寫出高並發的網路服務
  • Simplicity:語言設計簡潔,整個語言只有 25 個關鍵字,搭配官方工具鏈(go buildgo testgofmt 等)就能完成大部分開發流程
  • Garbage Collection:內建垃圾回收機制(GC),不必手動管理記憶體,在效能與開發效率之間取得良好平衡

Install Go

Go 官網提供標準安裝套件,支援 Linux、 Mac、Windows 系統,。下載對應平台的安裝檔並安裝完成後,可以在終端機(Terminal)輸入指令確認是否安裝成功:

1
2
3
$ go version

// 看到 go version go1.xx.x darwin/arm64 代表安裝完成

建立第一個程式:Hello, Go

環境建置完成後,先撰寫一個最簡單的「Hello World」程式,確認整體開發流程沒有問題。

  1. 建立專案資料夾
1
2
$ mkdir hello-go
$ cd hello-go
  1. 在資料夾內建立 main.go 檔案,內容如下:
1
2
3
4
5
6
7
package main

import "fmt"

func main() {
fmt.Println("Hello, Go!")
}
  1. 直接執行程式(不用先編譯成檔案):
1
2
3
$ go run main.go

// Hello, Go!

如果能順利印出 Hello, Go! 即可確認:

  • Go 安裝正確
  • 環境變數與路徑設定無誤
  • 編譯與執行流程均可正常運作

Go Modules 與 GOPATH

在較新的 Go 版本(1.13 之後),預設採用 Go Modules 模式進行相依套件管理。實務上代表:

專案不再強制需要放在 GOPATH 底下。
每個專案資料夾會有一個 go.mod 檔案,用來描述模組名稱與相依套件。
在專案資料夾中執行以下指令,即可初始化一個 Module:

1
$ go mod init example.com/hello

此指令會建立 go.mod 檔案,之後在該資料夾內執行 go run、go build 等指令時,Go 會依照 Module 模式來管理相依套件。

GOPATH 則是較早期的工作目錄概念,目前主要用途包括:

  • 作為共用工具與套件快取的儲存位置
  • 偶爾在錯誤訊息或文件中仍會看到相關說明

若想查看目前環境的 GOPATH 設定,可以使用:

1
$ go env GOPATH

對入門階段而言,了解「一般專案直接使用 Module 模式即可,不必刻意依附在 GOPATH 之下」大致就足夠,細節可以在實際開發過程中再逐步補充。

常用 Go 指令

開始撰寫程式後,會經常使用到以下幾個 Go 指令:

  • go run main.go:直接編譯並執行指定的 .go 檔,適合開發中快速測試
  • go build:在目前資料夾下編譯專案,產生可執行檔(但不會自動執行)

例如:

1
2
$ go build
$ ./hello-go
  • go test:執行以 _test.go 結尾的測試檔,是撰寫單元測試與自動化測試時的重要工具
  • go fmt / gofmt:依照官方格式自動排版程式碼。多數編輯器可以設定為在檔案儲存時自動執行,因此日常開發很少需要手動下指令
  • go mod tidy:清理與整理 go.mod / go.sum,清理與整理 go.mod、go.sum,移除未使用的套件並補上缺少的相依,讓相依關係保持一致

開發工具:編輯器與外掛

在開發體驗上,建議的工具組合如下:

  • VS Code + Go 擴充套件
    • 提供程式碼自動補完、定義跳轉、型別資訊顯示等功能
    • 可設定為在檔案儲存時自動執行 gofmt / goimports,統一程式碼風格與 import 排序
    • 內建除錯(Debug)整合,搭配 dlv(Delve)即可進行斷點除錯
  • Go 官方工具鏈(隨 Go 一併安裝)
    • gofmt:程式碼格式化工具
    • goimports:在格式化同時自動新增或移除 import。多半由編輯器在背景自動呼叫
    • go tool 系列:涵蓋 Profiler、Benchmark 等進階功能,有需要時可以再進一步深入。

若已經習慣使用 JetBrains 系列產品,也可以考慮專門的 Go IDE(例如 GoLand);不過在入門階段,使用 VS Code 搭配官方擴充套件,通常已足以應付多數開發情境。

本篇先將「環境建置」與「基本開發工具」整理過一遍,確認本機環境可以順利撰寫並執行簡單的 Go 程式。下一步,便可以開始嘗試實作實際的 Web 應用程式,例如:

  • 使用標準庫 net/http 實作最基礎的 HTTP Server
  • 建立一個簡單的 RESTful API
  • 逐步加入 Router、Middleware、設定管理(Config)等結構

參考資料

  • Golang 打造 Web 應用程式
  • GOを早く学ぶ:完全チュートリアル