這是 Go 語言從零到 Web 應用系列的第一篇。整個系列共 10 篇文章,將帶你從完全不懂 Go,到能獨立建構一個具備 CRUD、認證、資料庫的完整 Web 應用程式。

Go 是什麼?

Go(又稱 Golang)是 Google 於 2009 年正式推出的開源程式語言,由 Robert Griesemer、Rob Pike 和 Ken Thompson 三位電腦科學大師共同設計。其中 Ken Thompson 是 Unix 和 C 語言的共同發明者,Rob Pike 則是 UTF-8 編碼的共同發明者。

Go 的誕生並非出於學術目的,而是為了解決 Google 內部面臨的真實工程問題:

  • 編譯太慢:大型 C++ 專案的編譯時間動輒數十分鐘甚至數小時
  • 依賴管理混亂:複雜的依賴關係讓專案難以維護
  • 併發程式太難寫:傳統的 thread + lock 模型容易出錯
  • 語言太複雜:C++ 和 Java 的功能越加越多,學習曲線越來越陡

Go 的設計目標很明確:在保持簡單的前提下,解決大規模軟體工程的問題。

Go 的設計哲學

Go 的核心哲學可以用三個字總結:少即是多。

簡潔至上

Go 刻意省略了許多其他語言中「理所當然」的功能:

  • 沒有繼承:用組合(Composition)取代
  • 沒有泛型(Go 1.18 前):直到社群有足夠共識才加入
  • 沒有例外處理:用明確的錯誤回傳值取代 try/catch
  • 沒有 Operator Overloading
  • 沒有隱式型別轉換

這些看似「缺少」的功能,其實是刻意的設計選擇。Go 團隊認為,語言的價值不在於能做多少事,而在於讓開發者能多快理解和維護程式碼。

一種寫法

Go 提供了 gofmt 工具,統一所有程式碼的格式。沒有 tab vs space 的爭論,沒有大括號放哪行的討論。每個 Go 專案看起來都一樣,這大幅降低了閱讀他人程式碼的認知負擔。

快速編譯

Go 的編譯器設計從一開始就以速度為核心。即使是大型專案,通常也能在幾秒鐘內完成編譯。這讓「修改 → 編譯 → 測試」的開發循環非常流暢。

內建併發

Go 從語言層級就支持併發,透過 Goroutine 和 Channel 機制,讓開發者能用簡單直觀的方式撰寫高併發程式。

Go 適合用在哪裡?

最佳適用場景

1. 後端 API 服務

Go 的高效能和低記憶體佔用,讓它成為建構 REST API 和 gRPC 服務的絕佳選擇。標準庫自帶的 net/http 就足以建構生產級的 HTTP 服務。

2. 雲端基礎設施與 DevOps 工具

Docker、Kubernetes、Terraform、Prometheus — 現代雲端生態系的核心工具幾乎都是用 Go 寫的。Go 編譯成單一靜態二進位檔的特性,非常適合容器化部署。

3. CLI 工具

Go 編譯快、執行快、沒有 runtime 依賴,是建構命令列工具的理想語言。GitHub CLI(gh)、Hugo(本部落格使用的靜態網站生成器)都是 Go 的作品。

4. 微服務

Go 的輕量級 Goroutine(一個 Goroutine 只需約 2KB 記憶體,而一個 OS thread 通常需要 1MB+)讓它能輕鬆處理大量並發連線。

不太適合的場景

  • GUI 桌面應用:Go 的 GUI 生態系相對薄弱
  • 機器學習:Python 的 ML 生態系遠比 Go 成熟
  • 前端開發:雖然有 WebAssembly 支持,但 JavaScript/TypeScript 仍是主流
  • 嵌入式系統:C/C++ 和 Rust 更適合資源極度受限的環境

與其他語言的比較

Go vs Python

面向 Go Python
執行速度 編譯語言,非常快 直譯語言,相對慢
型別系統 靜態型別 動態型別
併發模型 Goroutine(原生支持) GIL 限制,需用 multiprocessing
學習曲線 中等 低
套件生態 中等規模,品質高 龐大且多元
部署 單一二進位檔 需要 runtime 和依賴

結論:Go 適合效能要求高的後端服務,Python 適合快速原型和資料科學。

Go vs Java

面向 Go Java
啟動速度 極快(毫秒級) 較慢(JVM 啟動需時間)
記憶體佔用 低 較高(JVM overhead)
語言複雜度 簡潔,25 個關鍵字 複雜,50+ 個關鍵字
生態系統 成長中 非常成熟
企業採用 中高 非常高
泛型支持 Go 1.18+ 基本支持 成熟的泛型系統

結論:Go 更輕量和現代,Java 生態更成熟、企業支援更廣泛。

Go vs Rust

面向 Go Rust
記憶體管理 垃圾回收(GC) 所有權系統(無 GC)
學習曲線 中等 陡峭
編譯速度 快 慢
執行效能 快 非常快(接近 C)
安全性 型別安全 記憶體安全 + 型別安全

結論:需要極致效能和記憶體安全選 Rust,需要開發速度和團隊生產力選 Go。

業界應用案例

Google

Go 的「老家」。Google 內部大量服務使用 Go 開發,包含 YouTube 和 Google Cloud 的基礎設施。

Uber

Uber 使用 Go 建構了他們的即時配對系統和地理空間服務。Go 的高併發特性讓它能處理每秒數百萬的定位更新請求。

Twitch

Twitch 的聊天系統使用 Go 重寫後,單一伺服器能處理超過 50 萬個同時連線,延遲大幅降低。

Docker & Kubernetes

整個現代容器生態系幾乎是 Go 的天下。Docker 和 Kubernetes 都是用 Go 開發的,這也反過來推動了 Go 在 DevOps 領域的普及。

Cloudflare

Cloudflare 使用 Go 處理他們的 DNS 服務和邊緣計算平台,每秒處理數百萬的 DNS 查詢。

學習 Go 的好理由

  1. 就業市場需求高:Go 開發者的薪資在各語言中名列前茅,且持續成長
  2. 學習曲線平緩:語言簡潔,有經驗的程式設計師通常幾天就能上手
  3. 工具鏈完善:內建格式化、測試、效能分析工具
  4. 跨平台編譯:一行指令就能編譯出不同作業系統的執行檔
  5. 社群活躍:持續成長的社群和豐富的學習資源

系列文章預覽

本系列共 10 篇文章,分為兩大部分:

基礎篇(第 1-5 篇)

  1. 為什麼要學 Go(本篇)
  2. 環境設定與 Hello World
  3. 基礎語法
  4. 資料結構
  5. 錯誤處理與併發

實戰篇(第 6-10 篇) 6. HTTP 基礎與第一個 Web Server 7. 專案結構與路由 8. 資料庫整合 9. 使用者認證 10. 測試與部署

每篇文章都可以獨立閱讀,但建議按順序跟著做,因為後面的文章會用到前面的知識。

下一步

在下一篇文章中,我們將動手安裝 Go 開發環境,設定編輯器,並寫出你的第一支 Go 程式。

準備好了嗎?讓我們開始吧!