這是 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 程式。

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