Go 語言是一種靜態型別、編譯式的程式語言,由 Google 設計開發。它結合了系統程式語言的效能與現代語言的開發效率,特別適合建構高併發的網路服務和分散式系統。

模組概覽#

本模組涵蓋 Go 語言的核心概念與實務技巧:

Go 基礎#

  • 工作區與 GOPATH 組態
  • 命令源碼檔案與程式庫源碼檔案
  • 程式實體(變數、常數、函式、型別)
  • Go Modules 依賴管理

資料結構#

  • 陣列與切片的內部機制
  • 字典(Map)的操作與限制
  • 結構體與方法定義
  • 介面型別的設計與實作
  • 指標操作與可定址性

併發程式設計#

  • Goroutine 與 Go 排程器
  • Channel 通訊機制
  • sync 套件(Mutex、RWMutex、WaitGroup、Once)
  • 原子操作與 sync.Map

I/O 與網路程式設計#

  • strings 與 bytes 套件
  • io 套件介面體系
  • bufio 緩衝 I/O
  • 網路程式設計基礎

測試與效能分析#

  • 測試規則與流程
  • 基準測試(Benchmark)
  • pprof 效能分析工具
  • 程式碼覆蓋率分析

Go 語言核心理念#

Go 語言的設計哲學強調簡潔高效可維護性。理解這些核心理念是掌握 Go 的關鍵。

簡潔優於複雜#

Go 語言刻意限制語言特性的數量,避免多種方式達成同一目標。這種設計使得程式碼更容易閱讀和維護。

組合優於繼承#

Go 不支援傳統的類別繼承,而是透過介面結構體嵌入實現程式碼重用。這種方式更加靈活,也避免了深層繼承帶來的複雜性。

併發是一等公民#

Goroutine 和 Channel 是 Go 語言的核心特性,使得撰寫高併發程式變得簡單直觀。Go 的併發模型基於 CSP(Communicating Sequential Processes)理論。

學習 Go 時,建議按照以下順序:基礎語法 -> 資料結構 -> 併發程式設計 -> I/O 操作 -> 測試與效能分析。這樣的學習路徑能夠循序漸進地建立完整的知識體系。

快速開始#

package main

import "fmt"

func main() {
    // 使用 goroutine 實現併發
    messages := make(chan string)

    go func() {
        messages <- "Hello, Go!"
    }()

    msg := <-messages
    fmt.Println(msg)
}

這個簡單的範例展示了 Go 語言的幾個核心特性:

  • package main 宣告可執行程式
  • import 引入標準函式庫
  • go 關鍵字啟動 goroutine
  • chan 建立 channel 進行 goroutine 間通訊