聯繫我們

課程簡介

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
  • Rune 與 Byte
  • 多變量賦值
  • 理解類型安全
  • 演練:編寫一個小型命令行數據處理程式

4. 運算符與表達式

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

5. 日期、時間與格式化

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

6. 數組、切片、映射與結構體

數組

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

切片

  • 理解切片與數組的區別
  • 創建切片
  • 追加元素
  • 複製切片
  • 切片長度與容量
  • 對切片進行切片操作
  • 切片常見陷阱

映射

  • 創建映射
  • 添加與刪除條目
  • 檢查鍵是否存在
  • 遍歷映射
  • 包含複雜數據的映射

結構體

  • 定義結構體

  • 結構體字段

  • 初始化結構體

  • 嵌套結構體

  • 匿名結構體

  • 結構體方法

  • JSON 結構體標籤

  • 動手實踐:使用結構體、切片和映射對用戶、產品及應用數據進行建模

7. 條件邏輯與循環

  • if 語句
  • elseelse if
  • 在條件中聲明變量
  • for 循環
  • 無限循環
  • 循環條件
  • breakcontinue
  • 使用 range 進行迭代
  • 嵌套循環
  • switch 語句
  • 基於表達式的 switch
  • 多個分支
  • 默認分支
  • 類型 switch
  • 演練:實現應用程式驗證與處理邏輯

8. 函數

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

9. 指針與內存概念

  • 什麼是指針?
  • 取地址與解引用運算符
  • 指針與函數參數
  • 指針接收者
  • 指向結構體的指針
  • 空指針 (Nil pointer)
  • 何時使用指針
  • 值語義與引用語義
  • 理解 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
  • 構建標誌 (Flags)
  • 特定環境配置
  • 針對不同操作系統和架構進行構建
  • 生成獨立二進制文件
  • 管理應用配置
  • 演練:為多個平台編譯應用程式

13. 文件處理與 Web 交互

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

14. 錯誤處理與除錯

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

15. 接口與抽象

  • 什麼是接口?
  • 隱式接口實現
  • 定義接口
  • 接口值
  • 空接口 / any
  • 類型斷言
  • 類型 switch
  • 指針實現與值實現
  • 設計小型接口
  • 依賴倒置
  • 使用接口進行測試
  • 降低應用耦合度
  • 動手實踐:在示例 Web 應用程式中引入接口

16. 包與項目組織

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

17. 使用 Goroutine 實現並發

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

18. 通道 (Channels)

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

19. 上下文與請求管理

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

20. 測試 Go 應用程式

  • 自動測試的重要性
  • 編寫單元測試
  • testing
  • 測試函數
  • 測試命名規範
  • 表驅動測試
  • 測試錯誤
  • 測試 HTTP 處理器
  • HTTP 測試服務器
  • 測試數據集 (Fixtures)
  • 測試覆蓋率
  • 基準測試 (Benchmarks)
  • 示例測試
  • 使用 Mock 或 Fake 測試接口
  • 動手實踐:為示例應用程式創建測試套件

21. 性能優化

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

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

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

23. 應用日誌與可觀測性

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

24. 將 Go 應用容器化

  • 為什麼使用容器?
  • Go 應用與容器化
  • 編寫 Dockerfile
  • 多階段構建
  • 構建最小運行時鏡像
  • 通過環境變量管理配置
  • 容器網絡
  • 暴露應用端口
  • 在容器中運行應用
  • 測試容器化應用
  • 動手實踐:將示例 Go 應用打包為生產就緒的容器

25. 部署

  • 為生產環境準備應用
  • 構建生產二進制文件
  • 環境配置
  • 基於容器的部署
  • 部署架構
  • 反向代理
  • 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 服務的機會

最低要求

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

適合對象

  • 開發人員
 28 小時

客戶評論 (5)

課程分類