Jun 17Golang Workspace多模組的救星 概述 Go 1.18 推出了 workspace ,成為官方主推的開發方式,可以方便地同時編輯、編譯、執行多個模組組成的程式 (其實是之前太不方便了)。 現在的專案結構大概長這樣: 一個 workspace 資料夾下可以有多個 module 資料夾。 workspace 資料夾中有個 go.work 來定義底下哪些是要用的 modules。 module 資料夾中有 go.mod ,定義 module 使用哪些其他的 modules …Golang4 min readGolang4 min read
Jun 12Golang GORM牽線木偶 前言 GORM 是 Golang 操作資料庫的第三方套件,主打 ORM (Object Relational Mapping),光是命名就覺得成大器。 撇開GO不談,身為一個曾經寫Python的分析師,第一次碰到 SqlAlchemy (也是一個實現 ORM 的資料庫包) ,覺得 ORM 好酷,隱含物件導向,我要昇華了… 怪了,我沒昇華,反而查 …Golang22 min readGolang22 min read
Jun 8Go os.exec 執行外部指令執行外部指令 我將 Go 執行外部指令分為三個階段: 設定主要指令 使用下面兩個function 設定主要指令 exec.Command : 一個指令名稱與多個參數 exec.CommandContext : 類似上面,但開頭帶入一個 context // 執行一個指令,把輸入的小寫英文改為大寫英文書出 cmd := exec.Command("tr", "a-z", "A …Golang2 min readGolang2 min read
Jun 7Go context核心是個 channel 概述 context package 是 Go 1.7 版推出的套件,用於程序間傳遞截止時間 (deadlines)、 取消訊號 (cancellation signals), 以及其他(比方說API查詢時)所帶的值 (request-scoped values)。 這件事情不是不能靠 channel 做到,況且 context pa …Go5 min readGo5 min read
Jun 6Go 初始化神說有光就有光 本篇介紹兩種 Go 做初始化的方式。 init() 作為初始化的工具,任何 .go 檔案裏面都可以有複數個 init() ,執行順序從上到下;任何package被import的時候都會依照import 的順序被初始化一次,main package 最後初始化。 package main import ( "fmt" ) var a, b int …Go3 min readGo3 min read
Jun 6Go Mutex 互斥鎖Mutual Exclusion 互斥鎖 Mutual Exclusion (Mutex),中文翻為互斥鎖,雖然可以透過 channel 達到這個功能,但 Go 官方提供了 sync.Mutex 以利使用。 sync.Mutex var mu, mu1, mu2 sync.Mutex // 不用初始化就能用了 mu.lock() mu.unlock() // 很少用,用 …Go4 min readGo4 min read
Jun 6Goroutines and OS ThreadsGoroutines 不是系統執行序 前篇提到 Goroutines 是輕量的執行序,但又不同,究竟哪裡不同? OS threads 系統執行序 OS threads 有固定大小的記憶體 (2MB),作為執行序的 stack,用於系統切換執行序時暫存local variables。 這個大小非常尷尬,對小程序太大,對大程序太小。 系統有個 kernel function 叫做 schedul …Go2 min readGo2 min read
Jun 5Goroutine & Go ChannelGO執行序與通道 前言 Go 提供了兩種平行運算的方式: communicating sequential processes (CSP) shared memory multithreading 本篇介紹 Go 實現 CSP 的方式,就是用使用 channels 在 goroutines 之間溝通。而 shared memory multithreading, …Go16 min readGo16 min read
May 31Go SwitchGo 語言中,switch 分兩類: Expression switches: 比對 values Type switches: 比對 types 後面的 case 概念與大多數的語言類似,從上比到下,有default。 Expression switches // compare with x switch x { // cases } // initialized x first, …Go3 min readGo3 min read
May 31Go Defer推遲 概述 defer <function call> 陳述式可以進行 function call,但被 call 的 function 會推遲到外層 function returns 時才執行。 在許多情境下,他可以充當 Golang 實現解構子的工具,但 defer 的彈性更大。 特性 被推遲的function,我們稱為 deferred func …Go5 min readGo5 min read