本系列文章將帶領讀者從零開始,使用 Go 語言打造一個完整、可維護、可測試的生產級 API 服務。我們將深入探討現代後端開發中的各個環節,從專案的架構設計、核心功能實現,到最終的測試、部署與維運。專案將採用六角形架構(Clean Architecture)思想,並整合 Gin、GORM、Docker、Swagger、golangci-lint 等業界常用工具與技術。
在上一篇文章中,我們介紹了如何在六邊形架構中優雅地處理錯誤,並建立了一套從資料庫層到 HTTP 回應的完整錯誤處理流程。這一篇,我們將進一步探討如何定義自己的錯...
什麼是單元測試?為什麼要寫單元測試?如何在 Go 中撰寫單元測試?這些問題的答案,網路上已有大量的資源可以參考,這裏就不再贅述。 然而,當我們的程式碼依賴外部系...
在我們整個專案的目錄結構中,internal 目錄佔據了核心地位,我們幾乎所有的業務程式碼都存放在其中。你可能會想,這僅僅是一個命名約定嗎?我能把它命名為 pr...
對於絕大多數後端工程師而言,MVC(Model-View-Controller)是我們學習 Web 開發時接觸的第一個,也是最經典的架構模式。無論是 Ruby...
當一個資料很少變動、但讀取頻繁的 API(例如「獲取使用者個人資料」)被大量呼叫時,每一次都去查詢資料庫會造成巨大的浪費和壓力。快取,就是將這些熱點資料暫時存放...
我們這裡會以銀行的分行資料為例,來說明快取服務的最佳實踐與注意事項。 第三步:用「裝飾者模式」整合快取邏輯 在上一篇中,我們已經完成了快取服務的基本架構,接下來...
在軟體開發的世界裡,有一條不成文的規則:「不要重複自己」(Don't Repeat Yourself, DRY)。這條規則強調,重複的程式碼不僅增加了維護的難度...
到目前為止,我們的架構在處理 CRUD(建立、讀取、更新、刪除)類型的功能時表現出色。但真實世界的業務遠比這複雜。如果需求變更為:「使用者註冊成功後,需要同時發...
軟體工程不僅僅是讓程式碼能夠運行,更重要的是保證其品質:可讀性、可維護性、以及潛在錯誤的預防。如果單純依賴人工 Code Review 來檢查程式碼風格、未處理...
我們的服務已經部署上線,但它是一個「黑盒子」。它現在健康嗎?每秒處理多少請求?平均回應時間是多少?錯誤率有沒有突然飆升?要回答這些問題,我們需要可觀測性(Obs...