返回課程
AI017 Professional

用 Go 程式設計

一門適合初學者的實作導向課程,介紹程式語言 Go。課程以太空探險為主題,分為許多小而易管理的單元,涵蓋指令式程式設計、資料型別、函式、方法、集合、狀態與並行處理。

4.9
24.0h
749 學習者
0 讚好
人工智能
開始學習

課程總覽

📚 內容概要

一門適合初學者的實作導向課程,介紹 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。

🎯 學習目標

  1. 定義 Go 程式語言及其主要應用場景。
  2. 解釋 Go 編譯器的角色及其相較於解譯器的優勢。
  3. 使用 Go Playground 來撰寫、編譯並執行程式碼。
  4. 正確運用「唯一正確的大括號風格」來結構化 Go 程式碼,避免語法錯誤。
  5. 使用多種變數宣告方式及算術賦值運算子來管理資料。
  6. 產生偽隨機數,並利用分支與邏輯運算子實現條件判斷邏輯。
  7. 使用 float32float64 來宣告與格式化浮點變數,並設定特定寬度與精確度。
  8. 識別並化解因浮點數不精確性與整數溢位所導致的錯誤。
  9. 利用 big 套件與無類型常數來處理超出標準位數限制的數字。
  10. 使用參數、引數與可變參數語法來定義與呼叫函數。

🔹 第 1 課:升空入軌

概述: 本課介紹 Go,這是一門現代雲端運算的程式語言。學生將學習 Go 的編譯性質與解譯語言的根本差異,如何立即在 Go Playground 進行實驗,以及包含套件與 main 函數的基本程式結構。

學習成果:

  • 定義 Go 程式語言及其主要應用場景。
  • 解釋 Go 編譯器的角色及其相較於解譯器的優勢。
  • 在 Go Playground 中撰寫、編譯並執行程式碼。

🔹 第 2 課:任務控制邏輯

概述: 本課介紹 Go 程式設計的基本構成要素,聚焦於程式碼的結構與執行流程控制。學生將學習「唯一正確的大括號風格」與程式進入點,進階至變數宣告簡化語法與數學運算子,最後以布林值、比較與分支邏輯掌握決策邏輯。

學習成果:

  • 正確運用「唯一正確的大括號風格」來結構化 Go 程式碼,避免語法錯誤。
  • 使用多種變數宣告方式與算術賦值運算子來管理資料。
  • 產生偽隨機數,並利用分支與邏輯運算子實現條件邏輯。

🔹 第 3 課:太空數據的物理原理

概述: 本課探討 Go 如何處理數值資料,從浮點數的精確度到天文距離所需的龐大數量級。學生將學習如何應對電腦記憶體的限制,包括浮點數不精確性與整數溢位問題,同時掌握明確的類型轉換,並使用 big 套件處理「非典型」的數值大小。

學習成果:

  • 使用 float32float64 來宣告與格式化浮點變數,並設定特定寬度與精確度。
  • 識別並化解因浮點數不精確性與整數溢位所導致的錯誤。
  • 利用 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 語句,實現協程間的安全通訊。
  • 建構資料管道,並透過關閉通道來管理協程的生命週期。