Open in app

Sign in

Write

Sign in

Gary Liao
Gary Liao

88 Followers

Home

About

Jun 17

Golang Workspace

多模組的救星 概述 Go 1.18 推出了 workspace ,成為官方主推的開發方式,可以方便地同時編輯、編譯、執行多個模組組成的程式 (其實是之前太不方便了)。 現在的專案結構大概長這樣: 一個 workspace 資料夾下可以有多個 module 資料夾。 workspace 資料夾中有個 go.work 來定義底下哪些是要用的 modules。 module 資料夾中有 go.mod ,定義 module 使用哪些其他的 modules …

Golang

4 min read

Golang Workspace
Golang Workspace
Golang

4 min read


Jun 12

Golang GORM

牽線木偶 前言 GORM 是 Golang 操作資料庫的第三方套件,主打 ORM (Object Relational Mapping),光是命名就覺得成大器。 撇開GO不談,身為一個曾經寫Python的分析師,第一次碰到 SqlAlchemy (也是一個實現 ORM 的資料庫包) ,覺得 ORM 好酷,隱含物件導向,我要昇華了… 怪了,我沒昇華,反而查 …

Golang

22 min read

Golang GORM
Golang GORM
Golang

22 min read


Jun 8

Go os.exec 執行外部指令

執行外部指令 我將 Go 執行外部指令分為三個階段: 設定主要指令 使用下面兩個function 設定主要指令 exec.Command : 一個指令名稱與多個參數 exec.CommandContext : 類似上面,但開頭帶入一個 context // 執行一個指令,把輸入的小寫英文改為大寫英文書出 cmd := exec.Command("tr", "a-z", "A-Z") 設定其他細節 這個階段可以設定所有周邊該做的事情 cmd.Output : 取得執行的standard output。 cmd.Input : 設定輸入執行的standard input。 cmd.CombinedOutput: 取得執行的 standard output & standard error 合併的結果。 cmd.Environ : 取得執行環境當下的環境變數,搭配 cmd.Env = append(cmd.Environ(), “POSIXLY_CORRECT=1”) 可增加環境變數。

Golang

2 min read

Golang

2 min read


Jun 7

Go context

核心是個 channel 概述 context package 是 Go 1.7 版推出的套件,用於程序間傳遞截止時間 (deadlines)、 取消訊號 (cancellation signals), 以及其他(比方說API查詢時)所帶的值 (request-scoped values)。 這件事情不是不能靠 channel 做到,況且 context pa …

Go

5 min read

Go context
Go context
Go

5 min read


Jun 6

Go 初始化

神說有光就有光 本篇介紹兩種 Go 做初始化的方式。 init() 作為初始化的工具,任何 .go 檔案裏面都可以有複數個 init() ,執行順序從上到下;任何package被import的時候都會依照import 的順序被初始化一次,main package 最後初始化。 package main import ( "fmt" ) var a, b int …

Go

3 min read

Go 初始化
Go 初始化
Go

3 min read


Jun 6

Go Mutex 互斥鎖

Mutual Exclusion 互斥鎖 Mutual Exclusion (Mutex),中文翻為互斥鎖,雖然可以透過 channel 達到這個功能,但 Go 官方提供了 sync.Mutex 以利使用。 sync.Mutex var mu, mu1, mu2 sync.Mutex // 不用初始化就能用了 mu.lock() mu.unlock() // 很少用,用 …

Go

4 min read

Go Mutex
Go Mutex
Go

4 min read


Jun 6

Goroutines and OS Threads

Goroutines 不是系統執行序 前篇提到 Goroutines 是輕量的執行序,但又不同,究竟哪裡不同? OS threads 系統執行序 OS threads 有固定大小的記憶體 (2MB),作為執行序的 stack,用於系統切換執行序時暫存local variables。 這個大小非常尷尬,對小程序太大,對大程序太小。 系統有個 kernel function 叫做 scheduler ,每隔一小段時間就會切換執行序,這個動作需要將當下執行的 thread 的狀態寫入 memory,並從memory中恢復要被執行的 thread 的狀態,這個動作稱為 full (kernel) context switch,而這個動作是慢的。 Goroutines Goroutines 的 stack 作用與前者同,不同之處在於可伸縮,初始為2KB,最大可到1GB (來源請求)。 Go runtime 擁有自己的 scheduler ,這項技術稱為 m:n scheduling,因為他讓 m 個 goroutines 在 n 個 OS threads 上多工運行。

Go

2 min read

Goroutines and OS Threads
Goroutines and OS Threads
Go

2 min read


Jun 5

Goroutine & Go Channel

GO執行序與通道 前言 Go 提供了兩種平行運算的方式: communicating sequential processes (CSP) shared memory multithreading 本篇介紹 Go 實現 CSP 的方式,就是用使用 channels 在 goroutines 之間溝通。而 shared memory multithreading, …

Go

16 min read

Goroutine & Go Channel
Goroutine & Go Channel
Go

16 min read


May 31

Go Switch

Go 語言中,switch 分兩類: Expression switches: 比對 values Type switches: 比對 types 後面的 case 概念與大多數的語言類似,從上比到下,有default。 Expression switches // compare with x switch x { // cases } // initialized x first, …

Go

3 min read

Go

3 min read


May 31

Go Defer

推遲 概述 defer <function call> 陳述式可以進行 function call,但被 call 的 function 會推遲到外層 function returns 時才執行。 在許多情境下,他可以充當 Golang 實現解構子的工具,但 defer 的彈性更大。 特性 被推遲的function,我們稱為 deferred func …

Go

5 min read

Go

5 min read

Gary Liao

Gary Liao

88 Followers

我很忙,一秒鐘幾十萬上下。

Following
  • Harini Janakiraman

    Harini Janakiraman

  • 蕭瑟寡人

    蕭瑟寡人

  • Sally Y.C. Yang

    Sally Y.C. Yang

  • Taipei SalsaMates

    Taipei SalsaMates

  • Ta-Chuan Chuang

    Ta-Chuan Chuang

See all (32)

Help

Status

About

Careers

Blog

Privacy

Terms

Text to speech

Teams