用 Go 程式設計
一門適合初學者的實作導向課程,介紹程式語言 Go。課程以太空探險為主題,分為許多小而易管理的單元,涵蓋指令式程式設計、資料型別、函式、方法、集合、狀態與並行處理。
課程總覽
📚 內容概要
一門適合初學者的實作導向課程,介紹 Go 程式語言。本課程以太空探險為主題,分為小而易於管理的單元,涵蓋指令式程式設計、資料類型、函數、方法、集合、狀態與並行處理。
透過小型課程與七個太空探索專題,發現使用 Go 編程的樂趣。
作者: Nathan Youngman, Roger Peppé
致謝: Jennifer Stout, Marina Michaels, Matthew Merkes, Joel Kotarski, Aleksandar Dragosavljević, Renée French, Olga Shalakhina, Erick Zelaya, April Milne, Monica Kamsvaag。
🎯 學習目標
- 定義 Go 程式語言及其主要應用場景。
- 解釋 Go 編譯器的角色及其相較於解譯器的優勢。
- 使用 Go Playground 來撰寫、編譯並執行程式碼。
- 正確運用「唯一正確的大括號風格」來結構化 Go 程式碼,避免語法錯誤。
- 使用多種變數宣告方式及算術賦值運算子來管理資料。
- 產生偽隨機數,並利用分支與邏輯運算子實現條件判斷邏輯。
- 使用
float32與float64來宣告與格式化浮點變數,並設定特定寬度與精確度。 - 識別並化解因浮點數不精確性與整數溢位所導致的錯誤。
- 利用
big套件與無類型常數來處理超出標準位數限制的數字。 - 使用參數、引數與可變參數語法來定義與呼叫函數。
🔹 第 1 課:升空入軌
概述: 本課介紹 Go,這是一門現代雲端運算的程式語言。學生將學習 Go 的編譯性質與解譯語言的根本差異,如何立即在 Go Playground 進行實驗,以及包含套件與 main 函數的基本程式結構。
學習成果:
- 定義 Go 程式語言及其主要應用場景。
- 解釋 Go 編譯器的角色及其相較於解譯器的優勢。
- 在 Go Playground 中撰寫、編譯並執行程式碼。
🔹 第 2 課:任務控制邏輯
概述: 本課介紹 Go 程式設計的基本構成要素,聚焦於程式碼的結構與執行流程控制。學生將學習「唯一正確的大括號風格」與程式進入點,進階至變數宣告簡化語法與數學運算子,最後以布林值、比較與分支邏輯掌握決策邏輯。
學習成果:
- 正確運用「唯一正確的大括號風格」來結構化 Go 程式碼,避免語法錯誤。
- 使用多種變數宣告方式與算術賦值運算子來管理資料。
- 產生偽隨機數,並利用分支與邏輯運算子實現條件邏輯。
🔹 第 3 課:太空數據的物理原理
概述: 本課探討 Go 如何處理數值資料,從浮點數的精確度到天文距離所需的龐大數量級。學生將學習如何應對電腦記憶體的限制,包括浮點數不精確性與整數溢位問題,同時掌握明確的類型轉換,並使用 big 套件處理「非典型」的數值大小。
學習成果:
- 使用
float32與float64來宣告與格式化浮點變數,並設定特定寬度與精確度。 - 識別並化解因浮點數不精確性與整數溢位所導致的錯誤。
- 利用
big套件與無類型常數來處理超出標準位數限制的數字。
🔹 第 4 課:建立模組化元件
概述: 本課介紹 Go 程式的基礎構成:函數、自訂類型與方法。學生將學習如何封裝可重複使用的邏輯,定義具有特定行為的新類型,並善用一等函數(包含閉包與匿名函數)來建立彈性且模組化的程式碼。課程以溫度轉換表的實際專題項目作結。
學習成果:
- 使用參數、引數與可變參數語法來定義與呼叫函數。
- 透過 Go 的命名規則區分公開與私有標示符。
- 建立自訂類型,並使用方法與接收者為其附加行為。
🔹 第 5 課:補齊貨艙儲備
概述: 本課介紹 Go 中用於管理資訊集合的關鍵資料結構。課程由固定長度的陣列及其記憶體複製行為開始,過渡到可動態調整的切片(slice),作為資料的靈活視窗,最後介紹用於高效鍵值查詢的映射(map)。本單元以「生命遊戲」專題作結,展示如何使用多維度切片來模擬複雜系統。
學習成果:
- 宣告、初始化並遍歷固定長度陣列與多維度格網。
- 使用索引範圍與
append函數動態擴展切片。 - 透過區分長度與容量,並使用
make預先配置集合,以提升記憶體效率。
🔹 第 6 課:規劃火星棲居結構
概述: 本課介紹 Go 如何組織複雜資料與行為。學生將學習如何將不同資料類型整合成結構(structs),使用複合文字(composite literals)初始化,並透過方法與建構函數管理其行為。課程亦探討 Go 獨特的設計哲學:偏好組合而非繼承,並透過隱含介面實現多型。
學習成果:
- 定義、初始化與複製結構,以管理複雜的火星座標與探測車資料。
- 使用結構標籤(struct tags)將 Go 結構編碼為 JSON 格式,以支援自訂資料交換。
- 實作方法、建構函數與結構嵌入,以建立可重複使用且條理分明的程式碼。
🔹 第 7 課:穿越企鵝洞穴
概述: 本課探討指標在 Go 中的力量與安全性,聚焦於指標如何實現高效資料修改與記憶體管理。課程提供防禦性程式設計的堅實框架,教導學生如何處理 nil 值、使用 defer 管理資源,並實踐慣用的錯誤處理模式——最終應用這些規則於數獨驗證引擎的開發中。
學習成果:
- 使用底線符 (
&) 與星號 (*) 來管理記憶體位址與解引用值。 - 使用指標參數與接收者,讓函數與方法能修改資料。
- 在切片、映射與介面中安全地處理
nil值,避免執行時崩潰。
🔹 第 8 課:多探測車通訊
概述: 本課介紹 Go 的核心並行原語:協程(goroutines)與通道(channels)。課程探討如何獨立執行任務、安全地在任務間傳遞訊息,並使用互斥鎖(Mutexes)管理共享狀態,以避免競爭條件。課程最後以一個專題項目作結,模擬火星探測車在格網中移動並報告發現。
學習成果:
- 使用
go關鍵字啟動與管理並行任務。 - 使用通道與
select語句,實現協程間的安全通訊。 - 建構資料管道,並透過關閉通道來管理協程的生命週期。