聯繫我們
 課程時長 28 時間:

課程簡介

1. Go 簡介

  • 什麼是 Go (Golang)?
  • Go 的歷史與設計哲學
  • Go 作為 Web 及系統程式設計語言的應用
  • 關鍵特性:
    • 靜態型別
    • 簡潔易讀
    • 快速編譯
    • 內建並行性
    • 垃圾回收
    • 跨平台編譯
  • Go 的常見使用場景
  • Go 的優勢與局限性
  • Go 與 C/C++、JavaScript、Ruby、Python 及 Java 的比較
  • 了解 Go 生態系統
  • Go 標準函式庫概覽
  • Go 模組與依賴管理
  • Go 應用程式的內部結構
  • 實戰操作: 檢查並運行一個簡單的 Go 程序

2. 設置 Go 開發環境

  • 安裝 Go
  • 理解 Go 工具鏈
  • 配置環境變數
  • 選擇 IDE 或代碼編輯器
  • 使用命令列進行 Go 操作
  • 建立 Go 工作區
  • 理解 Go 項目結構
  • 使用 Go 模組初始化項目
  • 使用 go mod init
  • 使用 go get 管理依賴
  • 更新和檢查依賴
  • 使用 gofmt 格式化源代碼
  • 使用 go run 運行程序
  • 使用 go build 構建應用程式
  • 安裝 Go 應用程式
  • 跨平台編譯應用程式
  • 實戰操作: 在容器中創建並配置 Go 項目

3. Go 變數、常數與型別

  • 聲明變數
  • 顯式型別與推斷型別
  • 簡短變數聲明
  • 常數
  • 零值
  • 變數的作用域與生命週期
  • 原始數據型別:
    • 整數
    • 浮點數
    • 複數
    • 布爾值
    • 字串
  • 型別轉換
  • 處理 Unicode 和 UTF-8
  • 字元 (Runes) 與字節 (Bytes)
  • 多重變數賦值
  • 理解型別安全
  • 演練: 構建一個小型命令列數據處理程序

4. 運算符與表達式

  • 算術運算符
  • 比較運算符
  • 邏輯運算符
  • 賦值運算符
  • 自增和自減
  • 運算符優先級
  • 整數與浮點數運算處理
  • 避免常見的型別轉換錯誤
  • 演練: 實現計算和驗證邏輯

5. 日期、時間與格式化

  • 使用 time 套件
  • 創建和操縱日期
  • 獲取當前時間
  • 時區和位置
  • 解析日期和時間
  • 格式化日期和時間
  • 計算時長
  • 處理 Unix 時間戳
  • 處理超時
  • 演練: 為應用程式添加時間戳和時長計算

6. 數組、切片、地圖與結構體

數組

  • 聲明數組
  • 初始化數組
  • 遍歷數組
  • 多維數組

切片

  • 理解切片與數組的區別
  • 創建切片
  • 附加元素
  • 複製切片
  • 切片長度與容量
  • 切分切片
  • 常見的切片陷阱

地圖

  • 創建地圖
  • 添加和移除條目
  • 檢查鍵是否存在
  • 遍歷地圖
  • 包含複雜數據的地圖

結構體

  • 定義結構體

  • 結構體字段

  • 初始化結構體

  • 巢狀結構體

  • 匿名結構體

  • 結構體方法

  • JSON 結構體標籤

  • 實戰操作: 使用結構體、切片和地圖對用戶、產品及應用程式數據進行建模

7. 條件邏輯與循環

  • if 語句
  • else 和 else if
  • 條件內的變數聲明
  • for 循環
  • 無窮循環
  • 循環條件
  • break 和 continue
  • 使用 range 進行遍歷
  • 巢狀循環
  • switch 語句
  • 基於表達式的 switch
  • 多個案例
  • 預設案例
  • 型別開關 (Type switches)
  • 演練: 實現應用程式驗證和處理邏輯

8. 函式

  • 定義函式
  • 函式參數
  • 返回值
  • 多重返回值
  • 具名返回值
  • 可變參數函式
  • 匿名函式
  • 函式值
  • 閉包 (Closures)
  • 遞歸
  • 將函式作為參數傳遞
  • 返回錯誤的函式
  • 設計小型、可重用的函式
  • 演練: 將現有代碼重構為可重用函式

9. 指標與內存概念

  • 什麼是指標?
  • 取地址和取內容運算符
  • 指標與函式參數
  • 指標接收者
  • 指向結構體的指標
  • 空指標 (Nil pointers)
  • 何時使用指標
  • 值語義與引用語義
  • 理解 Go 的內存管理與垃圾回收
  • 常見的指標錯誤
  • 實戰操作: 使用指標修改應用程式數據

10. 使用 Go 構建 Web 應用程式

  • Go 的 Web 能力概覽
  • 介紹 net/http 套件
  • 創建 HTTP 服務器
  • HTTP 請求與響應
  • HTTP 方法
  • 請求 URL 及查詢參數
  • HTTP 標頭
  • HTTP 狀態碼
  • 路由基礎
  • 創建處理程序 (Handlers)
  • 處理表單數據
  • 提供靜態文件
  • 處理 HTML 模板
  • 模板變數與控制結構
  • Web 應用程式的結構化
  • 實戰操作: 構建一個基礎的 Go Web 服務器

11. 構建 RESTful Web 服務

  • REST 架構基礎
  • 設計 API 端點
  • GET、POST、PUT、PATCH 和 DELETE
  • 處理 JSON
  • JSON 編碼與解碼
  • 請求驗證
  • HTTP 狀態碼
  • 錯誤響應
  • 查詢參數與路徑參數
  • API 響應結構
  • 將處理程序與業務邏輯分離
  • 實戰操作: 構建 CRUD REST API

12. Go 運行時、編譯與項目構建

  • 理解 Go 編譯器
  • Go 的構建流程
  • go run
  • go build
  • go install
  • go test
  • 構建標誌 (Build flags)
  • 環境特定配置
  • 為不同的操作系統和架構進行構建
  • 生成獨立二進制文件
  • 管理應用程式配置
  • 演練: 為多個平台編譯應用程式

13. 處理文件與 Web

  • 打開和關閉文件
  • 讀取文件
  • 寫入文件
  • 創建目錄
  • 文件元數據
  • 緩衝 I/O
  • 處理流 (Streams)
  • 讀寫 JSON 文件
  • HTTP 客戶端
  • 發送出站 HTTP 請求
  • 處理 HTTP 客戶端錯誤
  • 超時與取消
  • 處理 API 響應
  • 實戰操作: 從外部 API 獲取數據並在本地持久化

14. 錯誤處理與調試

  • Go 的錯誤處理方式
  • 從函式返回錯誤
  • 檢查錯誤
  • 創建自定義錯誤
  • 包裹錯誤 (Wrapping errors)
  • 為錯誤添加上下文
  • errors.Is 和 errors.As
  • 恐慌 (Panic) 與恢復 (Recovery)
  • 何時使用 panic
  • 調試常見的 Go 問題
  • 記錄應用程式活動
  • 使用 Go 調試工具
  • 演練: 診斷並修復故意引入的應用程式錯誤

15. 接口與抽象

  • 什麼是接口?
  • 隱式接口實現
  • 定義接口
  • 接口值
  • 空接口 / any
  • 型別斷言 (Type assertions)
  • 型別開關 (Type switches)
  • 指標實現與值實現
  • 設計小型接口
  • 依賴倒置
  • 使用接口進行測試
  • 降低應用程式耦合度
  • 實戰操作: 在示例 Web 應用程式中引入接口

16. 套件與項目組織

  • 創建套件
  • 套件命名規範
  • 導出與未導出的標識符
  • 導入套件
  • 套件初始化
  • 組織應用程式層次結構
  • 內部套件 (Internal packages)
  • 使用 Go 模組管理依賴
  • 語義化版本控制
  • 使用第三方套件
  • 避免循環依賴
  • 設計可維護的 Go 項目
  • 演練: 將應用程式重構為獨立的套件

17. 使用 Goroutines 實現並行性

  • 什麼是並行性?
  • Goroutines
  • 啟動 goroutines
  • 理解輕量級並行執行
  • 同步挑戰
  • 共享狀態
  • 競態條件 (Race conditions)
  • 使用 sync.WaitGroup
  • 互斥鎖與讀寫鎖 (Mutexes and read/write mutexes)
  • 原子操作
  • 實戰操作: 將順序任務轉換為並行處理

18. 通道 (Channels)

  • 理解通道
  • 發送和接收值
  • 緩衝通道與無緩衝通道
  • 阻塞行為
  • 關閉通道
  • 遍歷通道 (Ranging over channels)
  • 方向性通道
  • 基於通道的通信
  • Select 語句
  • 超時與取消
  • 工作池模式 (Worker-pool patterns)
  • 生產者/消費者模式 (Producer/consumer patterns)
  • 實戰操作: 構建並行工作系統

19. 上下文與請求管理

  • 為什麼上下文對 Web 應用程式很重要
  • context.Context
  • 請求作用域上下文
  • 取消 (Cancellation)
  • 截止時間 (Deadlines)
  • 超時 (Timeouts)
  • 將上下文傳播到應用程式各層
  • 取消數據庫或 HTTP 操作
  • 避免誤用上下文
  • 演練: 為 Web 應用程式添加請求取消和超時功能

20. 測試 Go 應用程式

  • 為什麼自動化測試很重要
  • 編寫單元測試
  • testing 套件
  • 測試函式
  • 測試命名規範
  • 表驅動測試 (Table-driven tests)
  • 測試錯誤
  • 測試 HTTP 處理程序
  • HTTP 測試服務器
  • 測試數據準備 (Test fixtures)
  • 測試覆蓋率
  • 基準測試 (Benchmarks)
  • 示例測試
  • 使用Mocks或Fakes測試接口
  • 實戰操作: 為示例應用程式創建測試套件

21. 效能優化

  • 理解 Go 應用程式效能
  • 識別瓶頸
  • CPU 與內存效能
  • 高效數據結構
  • 減少不必要的分配
  • 字串、字節與緩衝區
  • Goroutine 管理
  • 避免過度並行
  • 緩存策略
  • 數據庫與網絡考量
  • 應用程式剖析 (Profiling)
  • 基準測試與效能測試
  • 使用 Go 的剖析工具
  • 演練: 剖析並優化一個故意設計低效的應用程式

22. 安全與健壯的 Web 應用程式實踐

  • 驗證用戶輸入
  • 安全處理 HTTP 請求
  • 防止常見的 Web 漏洞
  • 安全的錯誤處理
  • 身份驗證與授權概念
  • 管理密鑰與配置
  • 安全的 HTTP 通信
  • 避免在日誌中記錄敏感信息
  • 依賴管理與更新
  • 資源限制與請求超時
  • 演練: 審查並加固示例 API

23. 應用程式日誌與可觀測性

  • 日誌基礎
  • 結構化日誌
  • 日誌級別
  • 請求日誌
  • 錯誤日誌
  • 關聯與請求 ID
  • 監控應用程式行為
  • 基本指標 (Metrics)
  • 健康檢查端點
  • 診斷生產環境問題
  • 實戰操作: 添加結構化日誌和健康檢查

24. 將 Go 應用程式容器化

  • 為什麼使用容器?
  • Go 應用程式與容器化
  • 編寫 Dockerfile
  • 多階段構建 (Multi-stage builds)
  • 構建最小運行時映像
  • 通過環境變數管理配置
  • 容器網絡
  • 暴露應用程式端口
  • 在容器中運行應用程式
  • 測試容器化應用程式
  • 實戰操作: 將示例 Go 應用程式打包為生產就緒的容器

25. 部署

  • 為生產環境準備應用程式
  • 構建生產二進制文件
  • 環境配置
  • 基於容器的部署
  • 部署架構
  • 反向代理 (Reverse proxies)
  • HTTPS/TLS 考量
  • 應用程式健康檢查
  • 優雅關閉 (Graceful shutdown)
  • 處理操作系統信號
  • 擴展 Go Web 應用程式
  • 水平擴展與垂直擴展
  • 基本部署故障排除
  • 實戰操作: 部署示例 Web 應用程式

26. 綜合項目:完整的 Go Web 應用程式

學員將通過開發一個完整的應用程式,將所學概念融会貫通。

該項目可以包括:

  • 使用 Go 模組初始化項目
  • 套件組織
  • HTTP 路由
  • REST API 端點
  • JSON 請求和響應處理
  • 輸入驗證
  • 錯誤處理
  • 接口
  • 並行處理
  • 外部 API 通信
  • 文件或數據庫持久化
  • 自動化測試
  • 日誌記錄
  • 效能考量
  • 容器化
  • 生產配置
  • 部署

27. 復盤與最佳實踐

  • 復盤 Go 核心語法
  • Go 編碼規範
  • 編寫地道的 Go 代碼
  • 保持代碼簡潔
  • 有效的套件設計
  • 錯誤處理最佳實踐
  • 接口設計原則
  • 並行性最佳實踐
  • 測試策略
  • 效能考量
  • 可維護性與可讀性
  • 新 Go 開發者常犯的錯誤
  • 建議的後續 Go 開發方法

28. 結論

  • 復盤關鍵概念
  • 復盤完成的 Web 應用程式
  • 問題與討論
  • 排查常見現實場景中的問題
  • Go 開發的建議下一步
  • 額外的 Go 函式庫和生態資源
  • 進一步構建生產級 Go 服務的機會

最低要求

  • 具備一般程式設計原則的理解

適合對象

  • 開發人員

客戶評論 (5)

即將到來的課程

課程分類