Skip to main content

Command Palette

Search for a command to run...

#go

Articles tagged with #go

  1. SingleFlight

    Go Singleflight 實作全攻略:優化 API 消耗、並發控制與監控實務 在開發高併發應用程式(如股票分析機器人)時,我們常面臨 「驚群效應」(Thundering Herd):當快取失效或系統剛啟動時,大量請求同時湧入,導致昂貴的 API(如 Gemini)成本爆炸或資料庫崩潰。 singleflight 是 Go 官方擴充套件(golang.org/x/sync/singleflight)中的神兵利器,確保當多個請求同時要求同一個結果時,實際的運算只會執行一次。 1. 為什麼需要...

    Dec 29, 20253 min read172
    SingleFlight
  2. 淺談 Go Iterator

    Go 1.23 引入了原生的 Iterator 支援,這是 Go 語言在函數式程式設計道路上的重要里程碑。這篇將分享 Go Iterator 的設計理念、使用方法和實踐。 什麼是 Iterator? Iterator(迭代器)是一個**函數**,它將序列中的連續元素傳遞給 callback 函數(通常命名為 yield)。當序列結束或 yield 返回 false 時,函數會停止迭代。 在 Go 1.23 中,Iterator 是語言的原生特性,介面定義在 iter 套件中。 Iterator ...

    Sep 6, 202510 min read256
    淺談 Go Iterator
  3. Go synctest:徹底解決並發測試的痛點

    Go 語言以 goroutine 和 channel 聞名,併發測試場景卻常常讓人頭痛:sleep 不夠會 fail,sleep 太久拖慢 CI,偶發錯誤難以重現。 Go 1.24 開始,提供了一個令人振奮的實驗性測試新功能:synctest。讓這一切成為過去!!預計將在 8 月釋出的 Go 1.25 正式釋出。 為什麼傳統並發測試這麼難寫? 讓我們看一個常見的例子:假設你要測試一個 goroutine 工作是否如期完成。 func TestWorker(t *testing.T) { ...

    Jul 19, 202510 min read546
    Go synctest:徹底解決並發測試的痛點
  4. Grafana Loki 和 Bloom Filter

    在系統中,常常會面對一個問題,這資料存在不?這命令剛剛執行過了不?往往我們會把這些結果儲存至資料庫中,並且很可能建立索引(Indexing)或是設定唯一約束(Unique constraint),並免重複資料存在。也可能會在 application 中以 Map 或是 Tree 的資料結構來儲存這些資料,以便提供判斷。 在 Tree 讀取上不會是 O(1),而 Map 在記憶體的空間利用率上也不能用到很極致,都會有些許碎片化的副作用產生。具體細節能參考這篇了解 Go Map。但有些許時刻不是要取...

    May 1, 202516 min read2.0K
    Grafana Loki 和 Bloom Filter