感謝您提交詢問!我們的一位團隊成員將在短時間內與您聯繫。
感謝您提交預訂!我們的一位團隊成員將在短時間內與您聯繫。
課程簡介
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語句else和else if- 在條件中聲明變量
for循環- 無限循環
- 循環條件
break和continue- 使用
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 rungo buildgo installgo test- 構建標誌 (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 - 類型斷言
- 類型 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)
培訓師證明了自己是該領域的專家,這一點我從不認爲理所當然。他提供了非常有用的行業標準見解。
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
機器翻譯