Go 語言系列(十一):面試必問問題

這是 Go 語言從零到 Web 應用系列的第十一篇。前十篇我們完成了從基礎到實戰的完整學習路徑,這篇整理 Go 面試中最常被問到的核心問題,幫助你在面試中展現對 Go 的深入理解。 Goroutine 與 Channel Q1:Go 的 Goroutine 排程模型是什麼? Go 使用 GMP 模型來排程 goroutine: G(Goroutine):要執行的工作單元,每個 go func() 建立一個 G M(Machine):作業系統執行緒,實際執行程式碼的載體 P(Processor):邏輯處理器,持有本地的 G 佇列,數量預設等於 CPU 核心數 排程流程: G1, G2, G3 ... → P(本地佇列)→ M(OS Thread)→ CPU P 從自己的本地佇列取出 G 放到 M 上執行。當本地佇列空了,會從其他 P「偷」G 來執行(work stealing)。 package main import ( "fmt" "runtime" ) func main() { // 查看 P 的數量 fmt.Println("GOMAXPROCS:", runtime.GOMAXPROCS(0)) // 查看目前的 goroutine 數量 fmt.Println("NumGoroutine:", runtime.NumGoroutine()) for i := 0; i < 5; i++ { go func(n int) { fmt.Printf("goroutine %d running on thread\n", n) }(i) } fmt.Println("NumGoroutine after launch:", runtime.NumGoroutine()) runtime.Gosched() // 讓出 CPU 給其他 goroutine } 面試加分點: ...

2026年2月24日 · 6 min · 1269 words · Jack