go

橫練金剛!將 Go 程式碼編譯成 WebAssembly — 以縮圖程式為例

近年來不斷地看到一些公司或服務採用 WebAssembly 這項技術,包含 Adobe, Microsoft, Google, Figma 等等,使我也對 WebAssembly 產生一點興趣,不過一直都沒有特別花時間研究,只知道 WebAssembly 是 1 種類似組合語言而且可以在瀏覽器中執行的低階語言,相較於 JavaScript 而言,更接近硬體層級,因此效率也更好一些。

直到最近 side project 有個很實際的需求作為契機,我才藉機會研究 WebAssembly 並體驗一下用 WebAssembly 打造應用的感覺。

現代很多語言都支援將程式碼編譯為 WebAssembly ,其中比較知名的是 Rust 程式語言,不過本文將以 Go / Golang 作為教學示範。

Posted on  Apr 26, 2024  in  Go 程式設計 - 高階  by  Amo Chen  ‐ 9 min read

認識 Go 的 error 與學習判斷 error 類型的方法

Go 的程式設計中,透過回傳 error 型別的值告知錯誤發生是相當常見的模式,所以很多函式的回傳定義大多如下所示,其中 1 個會是 error 型別,用以告知執行時的錯誤:

func FunctionName() (結果的型別, error)

這也是為什麼我們如果閱讀各種以 Go 開發的開放原始碼專案會很常看到類似以下的程式碼的原因:

r, err := FunctionName()
if err != nil {
	// Error handling here
}

所以學會判斷 error 的類型並處理各種類型的錯誤,變成 Go 程式設計的重要課題。

本文將探討如何判斷 error 類型以及多種不同判斷的方法。

Posted on  Apr 16, 2024  in  Go 程式設計 - 初階  by  Amo Chen  ‐ 6 min read

從 Python try except 的角度理解 Go 如何用 defer panic() recover() 處理例外/錯誤

學習 Go 的過程一定有人跟我一樣,對於 Go 用 defer(), panic(), recover() 處理例外/錯誤的方式感到困惑,特別是已經習慣使用 Java, JavaScript, Python 等程式語言的開發者來說, Java, JavaScript, Python 所提供的 try...catch , try-except 在可讀性相對友善很多之外,在開發時也直覺很多。

但要理解 Go 的 defer(), panic(), recover() 其實可以從已知的模式出發,如此原本無法輕易理解的事物,就會變成好理解許多。

本文將從 Python 的 try-except 出發,學習 Go 如何做到相同的例外(exception)處理。

Posted on  Mar 27, 2024  in  Go 程式設計 - 初階  by  Amo Chen  ‐ 5 min read

Go 用 -ldflags -X 參數在編譯時自動設定程式碼內的字串變數值

為了方便除錯,通常我們會在程式裡留下一些方便除錯的資訊,包含是哪個 commit 或者哪個系統編譯、哪個版本號等等⋯⋯。

你是手動更改這些資訊的嗎?

本文將透過實際範例教導如何自動化帶入這些資訊到 Go 的執行檔中,讓你徹底解脫手動之苦,效率 up up!

Posted on  Dec 7, 2023  in  Go 程式設計 - 中階  by  Amo Chen  ‐ 4 min read

VS Code 擴充推薦 - Dev Containers

本文介紹 VS Code 擴充 - Dev Containers, 這個擴充可以讓開發者用 VS Code 在 Docker 容器中進行開發,體驗上就跟在本機開發同樣自在,還可以統一開發團隊的開發環境!

目前知名開源專案 ELECTRON, CodeQL, etcd 等都已經使用 Dev Containers 作為開發一環,絕對值得使用!

Posted on  Aug 13, 2023  in  VS Code , VS Code 擴充推薦  by  Amo Chen  ‐ 4 min read

Python 會取代 Go 嗎?

先說我的看法,我認為 Python 不會取代 Go ,同樣地, Go 也不會取代 Python 。 +12,000 Developers declare that Python will replace Go (Here is Why) 一文根據 Go 官方做的問卷調查結果,探討 Go 為什麼有機會取代 Python ,總

Posted on  Jul 14, 2023  by  Amo Chen  ‐ 2 min read

invoice - 夠硬!就下指令開發票!

最近才在想自己做的 SaaS 接完金流之後,是否該著手寫每月開發票的部分,想不到就發現有好心人開源用 Golang 寫的開發票指令!😍 invoice 這個開源專案也很簡潔,說穿了

Posted on  Jun 27, 2023  by  Amo Chen  ‐ 1 min read

用 Docker 編譯並匯出執行檔 (compile & export)

最近在 macOS 用 Go 語言開發專案,不過遇到一些 Cross-Compiling 無法運作的問題,礙於時間壓力只得想辦法避開 Cross-Compiling 的問題,最直覺的方式就是直接在最終需要部署的作業系統中編譯,所以決定暫時用相同作業系統版本的 Docker container 以進行編譯,再將 Docker image 內最終編譯完成的執行檔匯出即可。

Docker 官方也提供文件指引如何匯出檔案,但是過程可能會遇到讀寫的問題,所以本文重新以比較簡單的方式介紹如何匯出 Docker image 內的檔案。

Posted on  Jun 16, 2023  in  Docker  by  Amo Chen  ‐ 2 min read