Go 語言反射揭祕:獲取 Tag 易如反掌,爲何 json 包卻視而不見?
從詭異現象說起:JSON 爲何忽略私有字段?type User struct{ ID intjson:“id”// 正常導出 Name stringjson:“name”// 正常導出 email stringjson:“email”// 私有字段,JSON無視!}funcmain(){ u := User{1,“Tom”,“tom@example.com”} ⌘ Read more
go-rag: 突破 Python 壟斷的 Golang RAG 系統
💡 項目概述https://github.com/wangle201210/go-rag 是基於 Golang 實現的企業級知識庫檢索增強生成系統,打破 RAG 領域 Python 一家獨大的局面。集成多知識庫管理、智能文檔解析、QA 優化、查詢重寫、多路召回、重排序、MCP 協議等核心功能,爲 Golang 開發者提供開箱即用的 RAG 解決方案。🎯 解決的核心痛點痛點一:語言生態侷限現有開源 ⌘ Read more
@bmallred@staystrong.run Ahhh this is an agent I’m tryining to play the game of Connect3. It uses a library written in Go I’ve been working on that supports Neuroevolution using Genetic Algorithms. Some features include: Mutation, Speciation, Lamarckian Evolution/Inheritence.
On my blog: Go Nowhere Fast https://john.colagioia.net/blog/2025/06/15/go-nowhere-fast.html #harm #rant #politics #harm
@lyse@lyse.isobeef.org Rust is so different and, at the same time, so complex – it’s not far fetched to assume that I simply don’t understand what’s going on here. The docs appear to be clear, but alas … is it a bugs in the docs? Is it a lack of experience on my part? Who knows.
By the way, looks like there was a bit of a discussion regarding that name:
Hmmm 🧐 Not what I thought was going on… No bug…
time="2025-06-14T15:24:25Z" level=info msg="updating feeds for 8 users"
time="2025-06-14T15:24:25Z" level=info msg="skipping 0 inactive users"
time="2025-06-14T15:24:25Z" level=info msg="skipping 0 subscribed feeds"
time="2025-06-14T15:24:25Z" level=info msg="updating 80 sources (stale feeds)"
golang 每日一庫之 urfave-negroni
urfave/negroni 是一個輕量級的、可擴展的 Go 中間件庫,專爲構建 HTTP 服務而設計。它的核心理念是中間件棧(Middleware Stack),可以像洋蔥一樣一層層包裹處理請求,非常適合構建具有清晰請求生命週期的 Web 應用或 API。GitHub 地址:https://github.com/urfave/negroni特點–中間件機制清晰簡潔 :支持多箇中間 ⌘ Read more
@bender@twtxt.net there you go, it shows just fine on the souris instance
‘Dystopian tales of that time when I sold out to Google’
If you ever wanted to know what it was like to be an engineer at Google during the early to late 2000s, here you go. Now even though Google is fundamentally a spyware advertising company (some 80% of its revenue is advertising; the proportion was even higher back then), we Engineers were kept carefully away from that reality, as much as meat eaters are kept away from videos of the meat industry: don’t think about it, jus … ⌘ Read more
Go 項目開發中,遷移數據庫最佳方案
數據庫遷移是構建和維護 Go 應用的重要環節。它能保持數據庫模式與你的代碼庫同步,處理更新,並確保你的應用在演進過程中始終可靠。選擇合適的遷移工具可以節省時間、減少錯誤,並使部署更加順暢。本文將深入探討適用於 Go 的最佳數據庫遷移工具,通過示例、對比和實用見解,幫助你爲項目挑選合適方案。我曾經歷過手動遷移的繁瑣與模式不匹配的混亂,因此會以易於理解的方式剖析每款工具的優勢、特點和使用場景。讓我們一 ⌘ Read more
Go 項目開發中,遷移數據庫最佳方案
數據庫遷移是構建和維護 Go 應用的重要環節。它能保持數據庫模式與你的代碼庫同步,處理更新,並確保你的應用在演進過程中始終可靠。選擇合適的遷移工具可以節省時間、減少錯誤,並使部署更加順暢。本文將深入探討適用於 Go 的最佳數據庫遷移工具,通過示例、對比和實用見解,幫助你爲項目挑選合適方案。我曾經歷過手動遷移的繁瑣與模式不匹配的混亂,因此會以易於理解的方式剖析每款工具的優勢、特點和使用場景。讓我們一 ⌘ Read more
Red Hat & FreeDesktop Go Into Mass Censorship Mode over Xorg Fork, Bans Dev
Immediately following news of the Xorg fork (Libre), the developer was banned by FreeDesktop and Red Hat mass closed hundreds of past Xorg merge requests. ⌘ Read more
golang 每日一庫之 Zinx
Zinx 是一個用 Go 語言編寫的輕量級、併發 TCP 服務器框架,旨在幫助初學者深入理解 TCP 服務端開發的核心架構,同時具有生產級特性的模塊化設計 。倉庫地址https://github.com/aceld/zinx設計理念學習導向 :源碼精簡,框架和教程同步開發,分版本迭代,一步步構建功能,降低學習門檻 。 生產適用 :模塊化、擴展性強,已被用於遊戲服務 ⌘ Read more
golang 每日一庫之 Zinx
Zinx 是一個用 Go 語言編寫的輕量級、併發 TCP 服務器框架,旨在幫助初學者深入理解 TCP 服務端開發的核心架構,同時具有生產級特性的模塊化設計 。倉庫地址https://github.com/aceld/zinx設計理念學習導向 :源碼精簡,框架和教程同步開發,分版本迭代,一步步構建功能,降低學習門檻 。 生產適用 :模塊化、擴展性強,已被用於遊戲服務 ⌘ Read more
上下文取消鏈:摧毀我們支付系統的 bug
一個看似無害的 Go 語言特性如何引發級聯故障,導致了 110,000 美元的交易損失。警報響起時,我們的支付處理系統已經癱瘓。信用卡交易失敗、訂閱無法續訂、客服聊天窗口被憤怒的消息淹沒。一次常規部署演變成了我們兩年內最嚴重的生產事故。罪魁禍首?對 Go 語言上下文取消的細微誤解,它引發了一連串我從未預料到的反應。背景:一次 “簡單” 的優化三週前,我接到了優化支付處理流程的任務。系統每分鐘處理數 ⌘ Read more
上下文取消鏈:摧毀我們支付系統的 bug
一個看似無害的 Go 語言特性如何引發級聯故障,導致了 110,000 美元的交易損失。警報響起時,我們的支付處理系統已經癱瘓。信用卡交易失敗、訂閱無法續訂、客服聊天窗口被憤怒的消息淹沒。一次常規部署演變成了我們兩年內最嚴重的生產事故。罪魁禍首?對 Go 語言上下文取消的細微誤解,它引發了一連串我從未預料到的反應。背景:一次 “簡單” 的優化三週前,我接到了優化支付處理流程的任務。系統每分鐘處理數 ⌘ Read more
Go 定時任務筆記
Go Timer,Ticker,Sleep———————time.Timertime.Timer 是一個單次的定時器,在指定時間後觸發一次後就不再重複。雖然說觸發後不會再次觸發,但資源不會自己就釋放了,需要調用Stop()方法來釋放資源否則還在內存中。在 Timer 結束後可以用Reset()方法重置計時器 (要在 Stop() 之後或未觸發時使用)。基於這種特性 Ti ⌘ Read more
Go 定時任務筆記
Go Timer,Ticker,Sleep———————time.Timertime.Timer 是一個單次的定時器,在指定時間後觸發一次後就不再重複。雖然說觸發後不會再次觸發,但資源不會自己就釋放了,需要調用Stop()方法來釋放資源否則還在內存中。在 Timer 結束後可以用Reset()方法重置計時器 (要在 Stop() 之後或未觸發時使用)。基於這種特性 Ti ⌘ Read more
Golang 裏普通 map 不用鎖,咋解決協程安全?
在 Go 語言開發中,map 是常用的數據結構,但原生 map 在併發讀寫時會導致 panic。這是因爲 Go 的設計哲學是 “顯式優於隱式”,不自動處理併發安全問題,需要開發者根據場景選擇合適的併發控制策略。本文將深入探討三種主流解決方案,並分析它們的適用場景和性能特點。方案一:官方推薦的 sync.Map基本用法sync.Map是 Go 標準庫提供的線程安全 map 實現,適合讀多寫少的場景: ⌘ Read more
Golang 裏普通 map 不用鎖,咋解決協程安全?
在 Go 語言開發中,map 是常用的數據結構,但原生 map 在併發讀寫時會導致 panic。這是因爲 Go 的設計哲學是 “顯式優於隱式”,不自動處理併發安全問題,需要開發者根據場景選擇合適的併發控制策略。本文將深入探討三種主流解決方案,並分析它們的適用場景和性能特點。方案一:官方推薦的 sync.Map基本用法sync.Map是 Go 標準庫提供的線程安全 map 實現,適合讀多寫少的場景: ⌘ Read more
在 Go 中爲什麼推薦使用空結構體作爲 Context 的 key
使用 Context 進行傳值我們知道 Context 主要有兩種用法,控制鏈路和安全傳值。在此我來演示下如何使用 Context 進行安全傳值:package mainimport ( ”context” ”fmt”)const requestIdKey = ”request-id”func main() { ctx := context.Background() // ⌘ Read more
在 Go 中爲什麼推薦使用空結構體作爲 Context 的 key
使用 Context 進行傳值我們知道 Context 主要有兩種用法,控制鏈路和安全傳值。在此我來演示下如何使用 Context 進行安全傳值:package mainimport ( ”context” ”fmt”)const requestIdKey = ”request-id”func main() { ctx := context.Background() // ⌘ Read more
Windows 7: a 2025 perspective (rose-tinted or not)
Quite often, I wonder how much nostalgia plays part in our perception of past events. Luckily, with software, you can go “back” and retest it, and so there’s no need for any illusions and misconceptions. To wit, I decided to reinstall and try Windows 7 again (as a virtual machine, but still), to see whether my impressions of the dross we call “modern” software today are justified. ↫ Igor Ljubuncic The conclusion is that, yes, you can … ⌘ Read more
What next after vibe coding
One interesting possible future of the emergence of “vibe coding” as common terminology is the possibility to position an alternative.
“Real coding”?
Future think pieces:
‘You can get yourself up and running quickly with “vibe coding” but when you get traction you’re going to want have people doing “real coding”’
‘switching from vibe coding to real coding will typically cost you X% of you initial development, so don’t put off switching too late’
[Comments](https://lobste.rs/s/m … ⌘ Read more
Go 項目該擁抱 Monorepo 嗎?Google 經驗、etcd 模式及白盒交付場景下的深度剖析
大家好,我是 Tony Bai。在 Go 語言的生態系統中,我們絕大多數時候接觸到的項目都是遵循 “一個代碼倉庫(Repo),一個 Go 模塊(Module)” 的模式。這種清晰、獨立的組織方式,在很多場景下都運作良好。然而,當我們放眼業界,特別是觀察像 Google 這樣的技術巨頭,或者深入研究 etcd 這類成功的開源項目時,會發現另一種代碼組織策略——Monorepo(單一代碼倉庫)——也在 ⌘ Read more
Go 項目該擁抱 Monorepo 嗎?Google 經驗、etcd 模式及白盒交付場景下的深度剖析
大家好,我是 Tony Bai。在 Go 語言的生態系統中,我們絕大多數時候接觸到的項目都是遵循 “一個代碼倉庫(Repo),一個 Go 模塊(Module)” 的模式。這種清晰、獨立的組織方式,在很多場景下都運作良好。然而,當我們放眼業界,特別是觀察像 Google 這樣的技術巨頭,或者深入研究 etcd 這類成功的開源項目時,會發現另一種代碼組織策略——Monorepo(單一代碼倉庫)——也在 ⌘ Read more
golang 每日一庫之 DDD 框架 freedo
Freedom:自由不是亂來,而是架構有道———————你是不是寫 Go 寫得挺開心的,直到有一天產品說: “這個業務流程以後會變、會拆、可能還會上天。”於是你開始發愁:怎麼寫纔不會三個月後改到哭? 怎麼解耦、怎麼擴展、怎麼不踩坑? 這時候,Freedom 躍馬而來,大喊一句: “用我!讓你寫得自由、改得瀟灑、跑得像風!”什麼是 Freedom—– ⌘ Read more
golang 每日一庫之 DDD 框架 freedo
Freedom:自由不是亂來,而是架構有道———————你是不是寫 Go 寫得挺開心的,直到有一天產品說: “這個業務流程以後會變、會拆、可能還會上天。”於是你開始發愁:怎麼寫纔不會三個月後改到哭? 怎麼解耦、怎麼擴展、怎麼不踩坑? 這時候,Freedom 躍馬而來,大喊一句: “用我!讓你寫得自由、改得瀟灑、跑得像風!”什麼是 Freedom—– ⌘ Read more
golang 每日一庫之 GoAdmin
你是不是曾經想用 Go 寫個後臺系統,結果一不小心就寫成了 Bug 系統?是不是寫到權限控制的時候,感覺自己變成了權限受害者?是不是本來想安安心心做個 CRUD 工人,結果被前端 UI 折磨到懷疑人生?別怕,GoAdmin 來拯救你了!什麼是 GoAdmin簡單說,GoAdmin 就是 Go 語言界的 “萬能後臺神器”。它能幫你:三分鐘起飛 :快速搭出一個後臺系統; 一行不寫也 ⌘ Read more
golang 每日一庫之 GoAdmin
你是不是曾經想用 Go 寫個後臺系統,結果一不小心就寫成了 Bug 系統?是不是寫到權限控制的時候,感覺自己變成了權限受害者?是不是本來想安安心心做個 CRUD 工人,結果被前端 UI 折磨到懷疑人生?別怕,GoAdmin 來拯救你了!什麼是 GoAdmin簡單說,GoAdmin 就是 Go 語言界的 “萬能後臺神器”。它能幫你:三分鐘起飛 :快速搭出一個後臺系統; 一行不寫也 ⌘ Read more
用 Go 語言實現用戶一鍵登錄,有哪些可靠的方案
一鍵登錄是現代應用中提升用戶體驗的關鍵功能,本文將深入探討 Go 語言實現一鍵登錄的幾種可靠方案,並提供完整的代碼實現和對比分析。方案一:短信驗證碼登錄(最常用)實現原理用戶輸入手機號 服務器發送短信驗證碼 用戶輸入驗證碼完成登錄 完整代碼實現package mainimport(“crypto/rand”“fmt”“math/big”“net/http”“time”“githu ⌘ Read more
用 Go 語言實現用戶一鍵登錄,有哪些可靠的方案
一鍵登錄是現代應用中提升用戶體驗的關鍵功能,本文將深入探討 Go 語言實現一鍵登錄的幾種可靠方案,並提供完整的代碼實現和對比分析。方案一:短信驗證碼登錄(最常用)實現原理用戶輸入手機號 服務器發送短信驗證碼 用戶輸入驗證碼完成登錄 完整代碼實現package mainimport(“crypto/rand”“fmt”“math/big”“net/http”“time”“githu ⌘ Read more
What’s your go-to message queue in 2025?
The space is confusing to say the least.
Message queues are usually a core part of any distributed architecture, and the options are endless:
Kafka, RabbitMQ, Redis {Pub-Sub, Streams}, Cloud Providers {AWS SQS, Kinesis; Google Pub/Sub; Azure Event Hubs, Service Bus}, Pulsar, ZeroMQ… and then there’s the “just use Postgres” camp for simpler use cases.
I’m trying to make sense of the tradeoffs between:
- async fire-and-forget pub/sub vs. sync RPC-like point … ⌘ Read more
Nintendo Switch 2: The Final Preview
Mark Santomartino and Julian Price discuss the Nintendo Switch 2 after going hands-on with the console ahead of its release. ⌘ Read more
When I chose the MIT license for all of my software, I thought:
“Should I use GPL, which I don’t really understand? Is that worth it? Yeah, there is a theoretical possibility that some company might use my code in their proprietary product … and then what? Should I sue them to enforce the GPL? I’m not going to do that anyway, so I’ll just use the MIT license.”
And now we have those LLM scrapers and now it’s suddenly a reality that these companies (ab)use my code. I can see it in my logs. I didn’t expect that back then.
GPL wouldn’t help, either, of course. (Regardless, I now think that GPL would have been the better choice anyway.)
I’m honestly considering taking my code and website offline. Maybe make it accessible through some obscure protocol like Gopher or Gemini, but no more HTTP.
(Yes, Anubis might help. Temporarily.)
I’m just tired.
My sweet baby girl passed away 2 weeks ago - everyone please go hug your cats, they are only here for so long and they go so suddenly ⌘ Read more
Golang 字符串拼接 6 種方法性能對比與最佳實踐
在 Go 語言中,字符串 (string) 是不可變 (immutable) 的數據類型,這意味着每次字符串拼接操作實際上都會創建一個新的字符串對象。對於需要頻繁拼接字符串的場景,選擇合適的方法對性能有顯著影響。本文將全面分析 6 種常見的字符串拼接方式,並通過基準測試揭示它們的性能差異。6 種字符串拼接方法詳解1. 直接使用+運算符funcconcatOperator(s string, n i ⌘ Read more
Golang 字符串拼接 6 種方法性能對比與最佳實踐
在 Go 語言中,字符串 (string) 是不可變 (immutable) 的數據類型,這意味着每次字符串拼接操作實際上都會創建一個新的字符串對象。對於需要頻繁拼接字符串的場景,選擇合適的方法對性能有顯著影響。本文將全面分析 6 種常見的字符串拼接方式,並通過基準測試揭示它們的性能差異。6 種字符串拼接方法詳解1. 直接使用+運算符funcconcatOperator(s string, n i ⌘ Read more
Go 語言 fsm 源碼解讀,這一次讓你徹底學會有限狀態機
我在文章《在 Go 中如何使用有限狀態機優雅解決程序中狀態轉換問題》中講解了有限狀態機的概念,並介紹了 Go 中有限狀態機 fsm 包的使用。本篇文章,我將更進一步,直接通過解讀源碼的方式,讓你深刻理解 fsm 是如何實現的,這一次你將徹底掌握有限狀態機。源碼解讀廢話不多說,我們直接上代碼。結構體首先 fsm 包定義了一個結構體 FSM 用來表示狀態機。 https://github.com/l ⌘ Read more
Go 語言 fsm 源碼解讀,這一次讓你徹底學會有限狀態機
我在文章《在 Go 中如何使用有限狀態機優雅解決程序中狀態轉換問題》中講解了有限狀態機的概念,並介紹了 Go 中有限狀態機 fsm 包的使用。本篇文章,我將更進一步,直接通過解讀源碼的方式,讓你深刻理解 fsm 是如何實現的,這一次你將徹底掌握有限狀態機。源碼解讀廢話不多說,我們直接上代碼。結構體首先 fsm 包定義了一個結構體 FSM 用來表示狀態機。 https://github.com/l ⌘ Read more
Harpoom: of course the Apple Network Server can be hacked into running Doom
Of course you can run Doom on a $10,000+ Apple server running IBM AIX. Of course you can. Well, you can now. Now, let’s go ahead and get the grumbling out of the way. No, the ANS is not running Linux or NetBSD. No, this is not a backport of NCommander’s AIX Doom, because that runs on AIX 4.3. The Apple Network Server could run no version of AIX later than 4.1.5 and there are substan … ⌘ Read more
golang 每日一庫之 bsm-redislock
bsm/redislock 是一個用於 在 Go 語言中實現基於 Redis 的分佈式鎖(distributed lock) 的開源庫,由 bsm 組織開發和維護。它實現了基於 Redis 的 SET NX PX 命令模式的分佈式鎖,兼容 Redlock 算法的核心思想,但更簡單和輕量。簡介–基於 Redis 單實例實現分佈式鎖 遵循 Redis 官方推薦的 SET resource-na ⌘ Read more
golang 每日一庫之 bsm-redislock
bsm/redislock 是一個用於 在 Go 語言中實現基於 Redis 的分佈式鎖(distributed lock) 的開源庫,由 bsm 組織開發和維護。它實現了基於 Redis 的 SET NX PX 命令模式的分佈式鎖,兼容 Redlock 算法的核心思想,但更簡單和輕量。簡介–基於 Redis 單實例實現分佈式鎖 遵循 Redis 官方推薦的 SET resource-na ⌘ Read more
go 實現 - 性能逆天又免費的 IoT 開發神器 —
它解決了什麼痛點? 物聯網的開發往往讓人抓狂——設備協議不兼容、數據格式亂七八糟、傳輸不穩定,還得擔心安全問題和擴展性。Magistrala IoT 平臺正是以此爲背景,爲開發者打造了一個安全、高效、兼容性強且高度擴展的免費開源平臺,讓設備溝通、數據管理變得簡單可靠,從而輕鬆實現規模化部署。Magistrala IoT 是什麼? Magistrala IoT(由 Abstract Machin ⌘ Read more
go 實現 - 性能逆天又免費的 IoT 開發神器 —
它解決了什麼痛點? 物聯網的開發往往讓人抓狂——設備協議不兼容、數據格式亂七八糟、傳輸不穩定,還得擔心安全問題和擴展性。Magistrala IoT 平臺正是以此爲背景,爲開發者打造了一個安全、高效、兼容性強且高度擴展的免費開源平臺,讓設備溝通、數據管理變得簡單可靠,從而輕鬆實現規模化部署。Magistrala IoT 是什麼? Magistrala IoT(由 Abstract Machin ⌘ Read more
golang 每日一庫之 goflow
goflow 是一個基於 Go 語言的高性能、可擴展、分佈式的工作流框架。它允許開發者以編程方式將分佈式工作流定義爲任務的有向無環圖(DAG),並通過多個工作節點(Worker)均勻分配負載來執行任務。核心特性—-1. DAG 構建與任務編排goflow 允許用戶以 DAG 的形式定義工作流,每個節點代表一個任務,邊表示任務之間的依賴關係。這種結構使得任務的執行順序清晰,便於管理複雜的工作流程 ⌘ Read more
golang 每日一庫之 goflow
goflow 是一個基於 Go 語言的高性能、可擴展、分佈式的工作流框架。它允許開發者以編程方式將分佈式工作流定義爲任務的有向無環圖(DAG),並通過多個工作節點(Worker)均勻分配負載來執行任務。核心特性—-1. DAG 構建與任務編排goflow 允許用戶以 DAG 的形式定義工作流,每個節點代表一個任務,邊表示任務之間的依賴關係。這種結構使得任務的執行順序清晰,便於管理複雜的工作流程 ⌘ Read more