透過 OpenFeature 實踐穩定產品功能發布
我一直覺得事情可以保持簡單就好,有問題改程式碼或環境變數切換就好,何必導入更複雜的套件管理與第三方服務呢?但真實情境當問題發生時不會有空閒慢慢部署與除錯,就有必要透過更完善的 Feature Flag 規劃來降低推送功能的風險,也能減少心臟病發作的機率。
我一直覺得事情可以保持簡單就好,有問題改程式碼或環境變數切換就好,何必導入更複雜的套件管理與第三方服務呢?但真實情境當問題發生時不會有空閒慢慢部署與除錯,就有必要透過更完善的 Feature Flag 規劃來降低推送功能的風險,也能減少心臟病發作的機率。
通常有些規模的專案會透過架構分層的方式來管理,而近期在研究如何更好的透過「依賴注入」替換模塊並實現更乾淨的測試。架構分層的概念可以參考之前寫過的:Express.js 入門建構 MVC 範例。我上傳了 go-gin-testing-todos 範例透過 DI 實踐測試架構。
From JS to Go, I wasn't familiar with Go's approach to modularity. Although similar in places, Go's simple and opinionated design is very evident.
從 JavaScript 轉寫 Go 我其實還是不太熟悉 Go 如何模組化處理代碼,雖然它們有大致相似的地方,但使用體驗感覺非常簡單甚至到簡陋的程度,當然簡單並不意味著「容易」或「沒用」,Go 簡單且固執己見的哲學在各方面都感受得到。
从 JavaScript 转写 Go 我其实还是不太熟悉 Go 如何模组化处理代码,虽然它们有大致相似的地方,但使用体验感觉非常简单甚至到简陋的程度,当然简单并不意味着「容易」或「没用」,Go 简单且固执己见的哲学在各方面都感受得到。
很早以前接觸資料庫就有聽說過「N+1 問題」,不過一直沒有寫下筆記認真思考過一次,這次撰寫問題成因與詳細解方與圖表。透過:資料結構設計(去正規化)、在 DB 層完成關聯資料查詢、批次查詢並在應用層組裝、ORM ODM Eager Loading 來解決。
使用 Agentic AI 解決問題時上下文管理至關重要,而 Anthropic 推出的 Agent Skill 上下文管理模式近期也成為業界的一種主流標準,在 Claude Code、Codex、Opencode 等工具中都有支援,透過研究如何整合進入現有的流程來增加開發效率。
Revisiting serialization/deserialization in Go and the origin of "Marshal", building on my earlier post about struct tags and reflect.
處理傳遞資料時都快忘了有「序列化與反序列化資料」這個步驟,因為都被套件像是:Axios 抽象掉了,近期在寫後端也重新溫習相關知識,也延續先前文章:Go Struct Tag 是什麼?如何透過 reflect 動態處理欄位?探討 Go 如何處理序列化資料。
处理传递资料时都快忘了有「序列化与反序列化资料」这个步骤,因为都被套件像是:Axios 抽象掉了,近期在写后端也重新温习相关知识,也延续先前文章:Go Struct Tag 是什么?如何透过 reflect 动态处理栏位?探讨 Go 如何处理序列化资料。
High-level programming languages usually involves the concept that "unused variables are automatically garbage collected". How do programs manage memory?
學習高階程式語言通常都會接受一個觀念是:「沒用到的變數會自動被垃圾回收掉」。不過越接近底層或開始探討效能問題,發現自己對於程式語言核心的記憶體概念 Heap 與 Stack 並沒有那麼清楚。程式語言究竟是如何分配與管理記憶體的?所謂的垃圾回收(Garbage Collection, GC)具體來說又做了哪些事情?
学习高阶程序语言通常都会接受一个观念是:「没用到的变量会自动被垃圾回收掉」。不过越接近底层或开始探讨性能问题,发现自己对于程序语言核心的记忆体概念 Heap 与 Stack 并没有那么清楚。程序语言究竟是如何分配与管理记忆体的?所谓的垃圾回收(Garbage Collection, GC)具体来说又做了哪些事情?
Context is added to Go standard library in 1.7. It's primarily used for including deadlines, cancellation signals, and passing request-scoped values.
Context 是 Go 1.7 添加於標準函式庫的功能。常在存取資料庫或其他服務時會遇到,初步看起來是用於「傳遞取消信號」用途的語法,用於處理 goroutine:背負期限(deadline)、取消信號(cancellation signal)、傳遞請求相關的值(request-scoped values)。