Goroutine Channel 理解筆記

此篇是用來紀錄我理解的 go routine 與相關範例代碼,藉由 ChatGPT 輔助理解和相關解釋,並配合實際嘗試與筆記來理解功能與特性。 Go routine ChatGPT 解釋: Go 語言的 goroutine 是一個非常輕量級的執行緒,它可以在一個程序中同時執行多個任務。和傳統的執行緒相比,goroutine 的開銷非常小,可以同時啟動數千甚至數萬個 goroutine,而不會造成系統資源的浪費和效能下降。Go 語言提供了 go 關鍵字來啟動一個新的 goroutine。當遇到 go 關鍵字時,Go 語言會在新的 goroutine 中執行該函數,而不會阻塞主執行緒的運行。這意味著我們可以同時執行多個任務而不需要等待前一個任務完成。 可以啟動多執行緒,也不會阻擋主程序的進程,以我理解的方式就是 Redis Queue 的運作,但一個是 service 一個則是內存功能,可能有些不太一樣的部分但如果是這樣理解會對我會比較好明白。就是執行到時不會阻塞主要流程。 相關範例代碼: package main import ( "fmt" "time" ) func count(name string) { for i := 1; i <= 5; i++ { fmt.Println(name, "count:", i) time.Sleep(time.Second) } } func main() { go count("goroutine") // 啟動 goroutine count("main") // 在主 goroutine 中執行 count } // output: // main count: 1 // goroutine count: 1 // main count: 2 // goroutine count: 2 // main count: 3 // goroutine count: 3 // main count: 4 // goroutine count: 4 // main count: 5 // goroutine count: 5 這邊會看到是交叉的出現計數,為什麼需要放入 time....

March 13, 2023 · Yish

使用 Go 實現 CURD 功能

此篇筆記適用於紀錄學習使用 go 作 web service 作練習。是參考這篇影片逐步練習和調整,會有點不一樣但值得參考。 初始化專案 $ go mod init gin-curd # 初始 go 專案模塊 $ go install github.com/cosmtrek/air@latest # 安裝監聽服務,類似 live reload 功能 $ go get -u github.com/gin-gonic/gin # 有名的 routing pkg $ go get github.com/joho/godotenv # .env 環境變數 pkg $ go get -u gorm.io/gorm # DB ORM $ go get -u gorm.io/driver/mysql # mysql driver 設計 Load .env variables Initial database connection and connected Definition routes create update destroy index (plural) show (singular) 實作 controllers models migrations initializers (load ....

March 9, 2023 · Yish