半熟前端

軟體工程師 / 台灣人 / 在前端的路上一邊探索其他領域的可能性

分類:golang

golang

Golang 當中的預設值以及 zero value

在 golang 當中,如果在初始化時沒有賦值,就會使用 zero value 。 不過用了一段時間會發現,如果每次都用 zero value 來代替,我們會分不清楚到底是使用者沒有輸入值導致 zero value,還是使用者原本就輸入了 zero value? 這時因為 Email, Name 都沒有輸入,所以預設都會是 "" 。到目前為止看起來都還好,但如果我們想要序列化為 JSON 呢? 這時會輸出: 我們的需求時常會是 email, name 在沒有值的時候改用 null…

(繼續閱讀...)
golang

如何搜集並集中 golang 應用中的 Log

這篇文章是看完 How to collect, standardize, and centralize Golang logs | Datadog 總結的心得。 使用 log 時通常有幾點要注意: 把 log 當作參數傳遞,需要使用到 log 時就傳參數進去 統一用 context 封裝,要用的時候從 context 拿出來 把 logger 包裝成 package,並且暴露一個變數給其他 package…

(繼續閱讀...)
golang

Goworker 簡介 — 搭配 Redis 實作 worker

最近正在將專案從 Ruby On Rails 當中逐漸搬移到 golang,除了一方面是想要練習寫寫看醜醜的語法感覺怎麼樣,一方面是想感受一下 golang 的威力還有在沒有一個既有的框架下,要怎麼組織自己的程式碼。 今天要來介紹的是 goworker 。會看上他的原因是搜尋 go worker 第一個跳出來的就是它,而且他實作的方式完全支援 resque (一個 Ruby 的 worker 套件)的形狀,所以我可以在 Ruby On Rails 的應用中將任務放到 queue…

(繼續閱讀...)
golang

在 Go 如何處理 connection lost?

研究了一下現在比較熱門的 sql 套件,發現幾乎都沒有像是可以即時在 connection lost 的時候跳 error 的功能。例如: nodejs 的 mysql 當中,我們可以用 connection.on(‘error’) 來監聽錯誤。 不過在 golang (至少在幾個比較熱門的套件)當中,卻沒有類似的功能。再深入一下也不難理解。 The sql package creates and frees connections automatically; it also…

(繼續閱讀...)
golang

【golang 筆記】 如何為你的專案設定環境變數

前言 在開發專案的時候常常需要切換不同的環境,也因此我們通常會設定不同的環境變數。不過如果直接寫死在程式當中每次修改起來實在太麻煩了,如果可以透過動態的方式傳入環境變數的話可以減少很多不必要的修改,程式也相對比較乾淨。 flag 一般在 golang 可以利用 flag 這個 package 做到類似的效果,例如: 或者也可以參考 這篇文章 中提到的方式,用 go build -ldflag 在 compile time…

(繼續閱讀...)
golang

make 與 new 的差別

在 golang 有兩個保留字 make 與 new ,也是剛開始學習 golang 的時候容易搞混的地方,這邊做個簡單的筆記。 new new 可以用來初始化泛型, 並且返回儲存位址 。所以通常我們會用指標變數來接 new 過後的型別。特別要注意的是,new 會自動用 zeroed value 來初始化型別,也就是字串會是 "" ,number 會是 0 ,channel, func, map, slice 等等則會是 nil 。 因為這個特性,如果我們對 map…

(繼續閱讀...)