所有文章列表

人與各種形狀圖示

道地 Go 語言 Enum 與 Union 實踐方式

Go 既沒有 Enum(枚舉)也沒有 Union(聯合)的關鍵字,因此會使用現有的語言特性來達成相同的效果。藉由研究其他語言如 TypeScript 來了解如何重現相同的特性。Enum 組合 (const + iota)與Union 組合 (interface + struct)。

驚嘆號圖示

道地 Go 錯誤處理模式: Must

最近用到 Go 官方 uuid 庫產生 UUID v7 時候留意到一種使用方式是:Must,他的描述也很簡單:Must returns uuid if err is nil and panics otherwise. 用途是「當錯誤不是一個可以恢復的選項時」,使用包裝好的 `Must` 直接 panic 錯誤。

迴圈圖示

藉助 AI Loop 統一後端請求與回應格式

你有遇過格式不一的後端專案嗎?近期在翻新某個 Go 後端專案痛苦的因素就是請求與回應格式不一,這是一個很直白且簡單的問題,但實際會造成很大的困擾。藉由定義完整的 Agent Skills 文件與 goal 來自動達成目標。

連結節點圖示

Go os.Root 預防路徑遍歷最佳實踐

最近在撰寫的 Go 後端使用到大量的本地檔案存取,其中最需要被防範的問題之一就是「路徑遍歷」。而在 Go 1.24 新增了 `os.Root` API 簡潔優雅的避免安全問題。可以考慮所有 `os.Open` 的使用情境是否安全,並替換上 `os.Root` 確保「操作不應存取該目錄之外的檔案」。

郵箱圖示

代理伺服器與後端服務如何安全處理請求的 IP 來源?

服務通常會經過各種代理轉發請求,但當我們要做判斷請求身份、審計日誌、一切與來源請求 IP 相關的功能時要如何拿到正確的資訊?記錄一下我根據 Go Gin 受信任代理文件學習到的最佳安全實踐。與同事討論讓我反思並挖掘真正設置所謂 `ClientIP` gin 做了哪些策略讓 ip 獲取是安全合理的。

CPU 符號

32-bits 與 64-bits 系統差異

還記得小時候的電腦都是 32-bits 的系統,大約在 win7 的時代已經逐步的替換成 64-bits 系統了,但我還是不了解具體來說有什麼差異,只記得有段時間有兩種軟體規格可以選擇,或是某些軟體需要用「兼容模式」來執行。

記憶體圖示

Go struct 記憶體對齊如何提升記憶體運用效率

在學習 Go 時會了解到 `struct` 其實就是一串自訂的資料結構,而其中欄位的「順序」將直接影響到在記憶體中所佔用的實際大小甚至程式的速度。了解記憶體對齊的概念除了「節省空間」外也能為打造「更佳的緩存局部性(Cache locality)」。

魔法棒符號

於 CI 自動化靜態驗證 Go 提升代碼品質

近期在開發 Go 專案時發現到提交代碼流程總是有些摩擦,像是開發時習慣用 Tab 到 GitLab 上寬度就會變得很奇怪,或是一些簡單的對齊問題都在無形消耗專注力。所以透過把一些原生的 Go 靜態檢查工具搬到 CI 上執行,確保統一的開發體驗。

清單符號

透過 Go Slog 達成結構化寬事件 logging 最佳實踐

最近有較多的時間思考開發上的最佳實踐,考慮到目前開發的一個後端項目基本就是拿 go 原生的 log 到處打印儲存片面狀態而已。在閱讀一些文件與最佳實踐後,我想著手改善現有的 logging 體驗透過導入 Go 1.21 引入的原生 slog 庫。

同步符號

平行程式開發:原子操作、鎖、信號量、具狀態 Goroutine

大多程式都可以採取「並行 Concurrency」的方式來達成簡單安全且高效的運行,但隨著多核 CPU 出現以及特定場景對於效率的追求「平行 Parallelism」運行程式是另一個提高運行效率方向。本文練習透過 Go 複習平行程式開發下資料存取相關技巧:原子操作、鎖、信號量⋯⋯

網格符號

從頭了解 Redis 快取種類與常見災難

Redis 是十分常見的 In-Memory 資料庫,工作上時不時會碰到它但很少仔細從頭了解它,所以透過撰寫重現一些案例達成更深刻的理解。快取就是把常存取的資料放在能夠快速獲取的地方,缺點是記憶體不像硬碟適合長久保存資料,但不管是提高速度、降低延遲、降低負擔或減輕成本⋯⋯快取都是很棒的選擇。

標籤圖示

Go 的 Zero Value 與實戰案例

相較於 C 讀取未定義數值的變數會造成安全漏洞或崩潰,或是動態語言如 JavaScript 沒有數值型別初始化的問題,Go 的設計上就自動賦予了確定意義的數值避免出錯與創建即可使用。具體來說在例如使用 json 反射的標籤中 `omitempty` 也正是運用了 Zero Value 的概念來判斷。

Robot Icon

學會挑選合適的模型透過 Ollama 本地運行 LLM

雖然在 AI 出現之前很難想像,但 2026 年工作上我已經很少「手寫程式」而是透過 AI 更有效率的輔助開發,我相信在 AI 百家爭鳴的時代不用特別執著用哪個模型或工具,挑個最新順手的免費方案就夠了,未來模型只會更便宜更有效率。

打勾圖示

使用 Testcontainers 實現後端整合測試

前端測試主要重點在與瀏覽器打交道(Jsdom、Headless Browser)且通常只與單一後端進行溝通,而後端測試則是面臨截然不同的難題:分散服務與狀態。這篇文章介紹實戰上我如何透過 Testcontainers 創建 Docker 測試環境來達成完整的後端整合測試流程。