动态

列表
创建 时间

atomic不是免費午餐

很多初級甚至中級開發會濫用atomic,因為在他們的世界觀裏atomic比mutex輕量,性能總是優於鎖的。 這話不能算錯,但有個很重要的前提,那就是原子操作競爭不激烈的時候。 “競爭激烈”是指什麼呢,指的是有很多線程在同一個資源上大量執行原子操作的情況。 落在這種情況下原子操作反而會成為性能拖油瓶。我們來看一個經典的原子計數器: func AddAtomic() uint64 { var co

创建 时间

下劃線字段在golang結構體中的應用

最近公司裏的新人問了我一個問題:這段代碼是啥意思。這個問題很普通也很常見,我還是個新人的時候也經常問,當然,現在我不是新人了但我也經常發出類似的提問。 代碼是長這樣的: type BussinessObject struct { _ [0]func() ID uint64 FieldA string FieldB *int64 ... }

创建 时间

Go 1.26 內置函數 new 新特性

目前golang 1.26的各種新特性還在開發中,不過其中一個在開發完成之前就已經被官方拿到枱面上進行宣傳了——內置函數new功能擴展。 每個新特性其實都有它的背景故事,沒有需求的驅動也就不會有新特性的誕生。所以在介紹這個新特性之前我們先來了解下是什麼樣的場景催生了這個功能。 如果你經常瀏覽一些大型的go項目,尤其是那些需要頻繁和JSON、GRPC或者yaml打交道的項目,比如k8s,你會發現這些

创建 时间

golang unique包和字符串內部化

最近在做老系統優化,正好遇到了需要使用字符串內部化的場景,所以今天就來説説字符串內部化這種優化技巧。 什麼是字符串內部化 熟悉Java或者python的開發者應該對“內部化”這種技術不陌生。內部化指的是對於內容完全相同的字符串變量,內存中只保留一份數據,所有的變量都引用同一份數據,從而節約內存。 舉個Java的例子: public class StringInternDemo { publ

创建 时间

C++23的out_ptr和inout_ptr

c++23新增了一些智能指針適配器,用來擴展和簡化智能指針的使用。 這次主要介紹的是std::out_ptr和std::inout_ptr。這兩個適配器用法和實現都很簡單,但網上的文檔都比較抱歉,還缺少一些比較重要的部分,因此單開一篇文章記錄一下。 out_ptr 首先從功能最簡單的out_ptr講起。 std::out_ptr其實是一個函數,返回一個類型為std::out_ptr_t的智能指針適