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