感謝您提交詢問!我們的一位團隊成員將在短時間內與您聯繫。
感謝您提交預訂!我們的一位團隊成員將在短時間內與您聯繫。
課程時長 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 rungo buildgo installgo 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)
培訓師證明了自己是該領域的專家,這一點我從不認爲理所當然。他提供了非常有用的行業標準見解。
Giuseppe
課程 - Learning Go Programming
機器翻譯
我很喜歡我們進行的實踐練習數量。我個人通過動手學習,所以Francesco提供了大量實踐練習,這非常好。我在理解幻燈片中的一些概念時遇到了困難,但當我真正動手實踐並能夠實現語言的一些關鍵特性時,這幫助我更好地理解了它。
Adam Fitzhugh - OpticoreIT
課程 - Learning Go Programming
機器翻譯
節奏適中,培訓師能夠幫助並應對稍難的問題。
Andrei Mihai - Viasat
課程 - Learning Go Programming
機器翻譯
Radu的深入知識,以及爲我量身定製的進度。
Adeel Ahmad - Coefficient Data Ltd
課程 - Learning Go Programming
機器翻譯
培訓師的靈活性。課程確實滿足了我們的特定需求。
Daniel Kurner - Daimler TSS
課程 - Learning Go Programming
機器翻譯