Fork from Go 語言開發實戰從入門到進階
-
Go 語言(又稱 Golang)是 Google 推出新一代的強大語言,2019 年 3 月 Google 公佈了去年底統計的問卷結果,發現 65% 用 Go 來寫網站,39% 用來開發系統程式,41% 用來做 DevOps(多重選擇),可想而知 Go 語言可以拿來從底層寫到上層。高效能的 Goroutine(併發)表現優於 Parallelism(並行),語法上簡潔又簡單,這也就是為什麼我們要來嘗試 Go 語言。
-
註:因學院學員的電腦不用被切換畫面,原來的 Homework 的時間可以改成:直接讓學員手把手跟著老師一起操作。
- 原因:學員常在自由的 Homework 的時間跑去做別的事,使得前段上課凝聚的集中力較容易散掉
時間 | 課程 | 時數 |
---|---|---|
09:10 ~ 10:25 | Go 語言開發環境 | 1.5 |
10:30 ~ 12:00 | Go 基本語法特性 | 1.5 |
13:30 ~ 14:20 | Go 基本語法特性 | 1.0 |
14:30 ~ 15:55 | Go Command Line 實作 | 1.5 |
16:00 ~ 16:20 | CGO、JSON 處理 | 0.5 |
-
Go 語言開發環境
- VSCode 環境介紹(Go 語言相關設定及技巧)
- Go Command 介紹(go get、build、install… 等指令技巧)
- GOPATH 目錄介紹(src、pkg、bin 目錄)
- 在 Windows 或 macOS 環境下安裝 Golang(在乾淨的 VM 中安裝 Golang + Git + VSCode + VSCode Extension)
- 如何建立一個 Go 專案:Go vendor vs Go module 介紹及使用時機
- Live Code -【ex01 hello-world】範例
- Live Code -【ex22 go-module-in-go.11】範例
-
Go 基本語法特性
-
Package
- Live Code -【ex02 golang-package】範例
- Live Code -【ex11 cross-build】範例
-
如何變數宣告(區域變數 vs 全域變數)及變數的初始值(什麼是 nil)
-
const、iota、if、switch、for 的使用方法
- Live Code -【ex03 if-switch-const】範例
-
Array vs Slice 區別(記憶體變化)
-
function 與 constructor
- Live Code -【ex14 go-func】範例
- Live Code -【ex15 pass-slice-as-function-args】範例
- Live Code - 精簡化的【ex16 init-func】範例
-
struct 與 method(pointers vs values)
- Pointers vs Values 差異
- Live Code -【ex04 constructor-and-struct】範例
-
map 與 interface
- Live Code -【ex05 interface】範例
- Live Code -【ex08 type-assertions】範例
-
interface{} 介紹
- Interface{} 當變數類型
- Interface{} 作為函式參數(fmt 擴充)
-
errors handler
- Live Code -【ex07 errors-handler】範例
-
導入 Unit Testing
- Live Code -【ex18 write-testing-and-doc】範例
- Live Code -【ex20 write-benchmark】範例
- Live Code -【ex36 performance】範例
-
Go Command Line 實作
- 目錄配置
- 套件介紹
- 專案 Config 配置
- 定義環境變數
- 讀取環境變數
- Live Code -【ex09 command-line-tool】範例
- Live Code -【ex27 how-to-load-env】範例
-
Go 的補充用法
- JSON
- Live Code -【ex17 json】範例
- CGO
- Live Code -【ex13 share-golang-package-to-c】範例
- JSON
-
時間 | 課程 | 時數 |
---|---|---|
09:10 ~ 10:00 | Go Channel | 1.0 |
10:10 ~ 12:00 | Go Routine | 2.0 |
13:30 ~ 15:20 | Go HTTP | 2.0 |
15:30 ~ 16:20 | Go Web 框架介紹:Gin | 1.0 |
-
Go Channel
- for map vs for channel(for 迴圈注意事項)
- 如何初始化 Channel
- 什麼是 buffered vs unbuffered channel
- 如何 closed channel
- 用 for loop 讀取 channel
- 設定專門讀寫 channel 流程
-
Go Routine
- Struct Method 搭配 goroutine 發生什麼問題?
- 如何建立 goroutine
- 如何實作同步
- 避免 race condition
- Live Code -【ex06 go-concurrency】範例
- Live Code -【ex24 debug-go-code-using-vs-code】範例
- Live Code -【ex26 example26-go-trace】範例
- Live Code -【ex29 handle-multiple-channel】範例
- Live Code -【ex31 job-queue】範例
- Live Code -【ex32 what-is-select】範例
- Live Code -【ex33 share-memory-by-communicating】範例
- Live Code -【ex34 graceful-shutdown-with-worker】範例
- Live Code -【ex35 goroutine-with-context】範例
- Live Code -【ex37 three-to-handle-goroutine】範例
- Live Code -【ex38 concurrency-is-still-not-easy】範例
-
Go HTTP
- Live Code -【ex10 simple-http-server】的 server、client 範例
- Live Code -【ex21 simple-golang-https-tls】範例
- Live Code -【ex28 webserver-with-gracefull-shutdown】的 example 01 範例
- Live Code -【ex30 context-timeout】範例
-
HTTP framwork: Gin
- Live Code -【ex10 simple-http-server】的 gin 範例
- Live Code -【ex23 application-with-up】範例
時間 | 課程 | 時數 |
---|---|---|
09:10 ~ 11:00 | Go Web 框架介紹及 API 實作 | 2.0 |
11:10 ~ 12:00 | Go API Middleware 實作 | 1.0 |
13:30 ~ 15:20 | Go API 測試實作 | 2.0 |
15:30 ~ 16:20 | Go GraphQL API 實作(框架介紹與效能) | 1.0 |
-
Go Web 框架介紹及 API 實作
- 評估條件
- 效能評估
-
Go API Middleware 實作
- 使用 Gin 實作 CRUD API
-
API 測試實作
- Logger 介紹
- 實作 Middleware
- API Token 驗證
- 使用 Contxt 存取資料
- 資料庫串接
- Xorm
- Gorm
- 資料庫測試
- SQLite 開發
- PostGres 或 MySQL 整合測試
- GraphQL 介紹
- 為什麼捨棄 Restful API
- 框架介紹與效能
- GraphQL 測試
時間 | 課程 | 時數 |
---|---|---|
09:10 ~ 12:00 | Go 的 Docker & K8S 應用 | 3.0 |
- Go 的 Docker & K8S 應用
- Live Code -【ex12 build-with-docker】範例
- Live Code -【ex19 deploy-with-kubernetes】範例
- Live Code -【ex25 traefik-golang-app-lets-encrypt】範例
- Live Code -【ex28 webserver-with-gracefull-shutdown】的 example 02 範例