yue-fang-readfog-go 

feeds.twtxt.net

No description provided.

Go 項目開發中,遷移數據庫最佳方案
數據庫遷移是構建和維護 Go 應用的重要環節。它能保持數據庫模式與你的代碼庫同步,處理更新,並確保你的應用在演進過程中始終可靠。選擇合適的遷移工具可以節省時間、減少錯誤,並使部署更加順暢。本文將深入探討適用於 Go 的最佳數據庫遷移工具,通過示例、對比和實用見解,幫助你爲項目挑選合適方案。我曾經歷過手動遷移的繁瑣與模式不匹配的混亂,因此會以易於理解的方式剖析每款工具的優勢、特點和使用場景。讓我們一 ⌘ Read more

⤋ Read More

golang 每日一庫之 Zinx
Zinx 是一個用 Go 語言編寫的輕量級、併發 TCP 服務器框架,旨在幫助初學者深入理解 TCP 服務端開發的核心架構,同時具有生產級特性的模塊化設計 。倉庫地址https://github.com/aceld/zinx設計理念學習導向 :源碼精簡,框架和教程同步開發,分版本迭代,一步步構建功能,降低學習門檻 。 生產適用 :模塊化、擴展性強,已被用於遊戲服務 ⌘ Read more

⤋ Read More

上下文取消鏈:摧毀我們支付系統的 bug
一個看似無害的 Go 語言特性如何引發級聯故障,導致了 110,000 美元的交易損失。警報響起時,我們的支付處理系統已經癱瘓。信用卡交易失敗、訂閱無法續訂、客服聊天窗口被憤怒的消息淹沒。一次常規部署演變成了我們兩年內最嚴重的生產事故。罪魁禍首?對 Go 語言上下文取消的細微誤解,它引發了一連串我從未預料到的反應。背景:一次 “簡單” 的優化三週前,我接到了優化支付處理流程的任務。系統每分鐘處理數 ⌘ Read more

⤋ Read More

Go 定時任務筆記
Go Timer,Ticker,Sleep———————time.Timertime.Timer 是一個單次的定時器,在指定時間後觸發一次後就不再重複。雖然說觸發後不會再次觸發,但資源不會自己就釋放了,需要調用Stop()方法來釋放資源否則還在內存中。在 Timer 結束後可以用Reset()方法重置計時器 (要在 Stop() 之後或未觸發時使用)。基於這種特性 Ti ⌘ Read more

⤋ Read More

Golang 裏普通 map 不用鎖,咋解決協程安全?
在 Go 語言開發中,map 是常用的數據結構,但原生 map 在併發讀寫時會導致 panic。這是因爲 Go 的設計哲學是 “顯式優於隱式”,不自動處理併發安全問題,需要開發者根據場景選擇合適的併發控制策略。本文將深入探討三種主流解決方案,並分析它們的適用場景和性能特點。方案一:官方推薦的 sync.Map基本用法sync.Map是 Go 標準庫提供的線程安全 map 實現,適合讀多寫少的場景: ⌘ Read more

⤋ Read More

在 Go 中爲什麼推薦使用空結構體作爲 Context 的 key
使用 Context 進行傳值我們知道 Context 主要有兩種用法,控制鏈路和安全傳值。在此我來演示下如何使用 Context 進行安全傳值:package mainimport (    ”context”    ”fmt”)const requestIdKey = ”request-id”func main() {    ctx := context.Background()    // ⌘ Read more

⤋ Read More

Go 項目該擁抱 Monorepo 嗎?Google 經驗、etcd 模式及白盒交付場景下的深度剖析
大家好,我是 Tony Bai。在 Go 語言的生態系統中,我們絕大多數時候接觸到的項目都是遵循 “一個代碼倉庫(Repo),一個 Go 模塊(Module)” 的模式。這種清晰、獨立的組織方式,在很多場景下都運作良好。然而,當我們放眼業界,特別是觀察像 Google 這樣的技術巨頭,或者深入研究 etcd 這類成功的開源項目時,會發現另一種代碼組織策略——Monorepo(單一代碼倉庫)——也在 ⌘ Read more

⤋ Read More

golang 每日一庫之 DDD 框架 freedo
Freedom:自由不是亂來,而是架構有道———————你是不是寫 Go 寫得挺開心的,直到有一天產品說: “這個業務流程以後會變、會拆、可能還會上天。”於是你開始發愁:怎麼寫纔不會三個月後改到哭? 怎麼解耦、怎麼擴展、怎麼不踩坑? 這時候,Freedom 躍馬而來,大喊一句: “用我!讓你寫得自由、改得瀟灑、跑得像風!”什麼是 Freedom—– ⌘ Read more

⤋ Read More

golang 每日一庫之 GoAdmin
你是不是曾經想用 Go 寫個後臺系統,結果一不小心就寫成了 Bug 系統?是不是寫到權限控制的時候,感覺自己變成了權限受害者?是不是本來想安安心心做個 CRUD 工人,結果被前端 UI 折磨到懷疑人生?別怕,GoAdmin 來拯救你了!什麼是 GoAdmin簡單說,GoAdmin 就是 Go 語言界的 “萬能後臺神器”。它能幫你:三分鐘起飛 :快速搭出一個後臺系統; 一行不寫也 ⌘ Read more

⤋ Read More

golang 每日一庫之工作流引擎 cadence
Cadence 是由 Uber 開發並開源的分佈式工作流編排引擎,旨在幫助開發者構建可擴展、可靠且具備容錯能力的分佈式應用程序。這個 Uber 當前給我發了好多打車券,還是很厚道的。特點–1. 容錯的有狀態工作流Cadence 的工作流是 “容錯的有狀態工作流”,即使在進程崩潰或服務重啓的情況下,工作流的狀態(包括局部變量、調用棧、定時器等)也能自動恢復,確保業務流程不中斷。2. 異步任務與自動 ⌘ Read more

⤋ Read More

用 Go 語言實現用戶一鍵登錄,有哪些可靠的方案
一鍵登錄是現代應用中提升用戶體驗的關鍵功能,本文將深入探討 Go 語言實現一鍵登錄的幾種可靠方案,並提供完整的代碼實現和對比分析。方案一:短信驗證碼登錄(最常用)實現原理用戶輸入手機號 服務器發送短信驗證碼 用戶輸入驗證碼完成登錄 完整代碼實現package mainimport(“crypto/rand”“fmt”“math/big”“net/http”“time”“githu ⌘ Read more

⤋ Read More

golang 每日一庫之工作流引擎 Temporal
Temporal 是一個開源的分佈式工作流編排系統,旨在簡化構建和運行可靠、可擴展的長時間運行的後端應用程序。它最初是由 Uber 的 Cadence 系統演變而來,現在由 Temporal Technologies 公司主導開發。目前已被 Coinbase、Netflix、Box、Snap 等大規模應用。核心功能—-1. 分佈式工作流編排Temporal 支持在多臺機器上協調執行復雜的業務邏 ⌘ Read more

⤋ Read More

Golang 字符串拼接 6 種方法性能對比與最佳實踐
在 Go 語言中,字符串 (string) 是不可變 (immutable) 的數據類型,這意味着每次字符串拼接操作實際上都會創建一個新的字符串對象。對於需要頻繁拼接字符串的場景,選擇合適的方法對性能有顯著影響。本文將全面分析 6 種常見的字符串拼接方式,並通過基準測試揭示它們的性能差異。6 種字符串拼接方法詳解1. 直接使用+運算符funcconcatOperator(s string, n i ⌘ Read more

⤋ Read More

Go 語言 fsm 源碼解讀,這一次讓你徹底學會有限狀態機
我在文章《在 Go 中如何使用有限狀態機優雅解決程序中狀態轉換問題》中講解了有限狀態機的概念,並介紹了 Go 中有限狀態機 fsm 包的使用。本篇文章,我將更進一步,直接通過解讀源碼的方式,讓你深刻理解 fsm 是如何實現的,這一次你將徹底掌握有限狀態機。源碼解讀廢話不多說,我們直接上代碼。結構體首先 fsm 包定義了一個結構體 FSM 用來表示狀態機。 https://github.com/lRead more

⤋ Read More

golang 基礎之 errgroup
Golang 的擴展併發庫 golang.org/x/sync/errgroup 提供了對多協程任務進行管理和錯誤處理的便利功能。與基礎的 sync.WaitGroup 相比,errgroup.Group 在等待所有任務完成的同時,還會自動捕獲第一個非 nil 錯誤並返回。如果通過 WithContext 創建 Group,當任一子任務返回錯誤時,errgroup 會取消關聯的 Context,從 ⌘ Read more

⤋ Read More

golang 每日一庫之 bsm-redislock
bsm/redislock 是一個用於 在 Go 語言中實現基於 Redis 的分佈式鎖(distributed lock) 的開源庫,由 bsm 組織開發和維護。它實現了基於 Redis 的 SET NX PX 命令模式的分佈式鎖,兼容 Redlock 算法的核心思想,但更簡單和輕量。簡介–基於 Redis 單實例實現分佈式鎖 遵循 Redis 官方推薦的 SET resource-na ⌘ Read more

⤋ Read More

go 實現 - 性能逆天又免費的 IoT 開發神器 —
它解決了什麼痛點? 物聯網的開發往往讓人抓狂——設備協議不兼容、數據格式亂七八糟、傳輸不穩定,還得擔心安全問題和擴展性。Magistrala IoT 平臺正是以此爲背景,爲開發者打造了一個安全、高效、兼容性強且高度擴展的免費開源平臺,讓設備溝通、數據管理變得簡單可靠,從而輕鬆實現規模化部署。Magistrala IoT 是什麼? Magistrala IoT(由 Abstract Machin ⌘ Read more

⤋ Read More

golang 每日一庫之 goflow
goflow 是一個基於 Go 語言的高性能、可擴展、分佈式的工作流框架。它允許開發者以編程方式將分佈式工作流定義爲任務的有向無環圖(DAG),並通過多個工作節點(Worker)均勻分配負載來執行任務。核心特性—-1. DAG 構建與任務編排goflow 允許用戶以 DAG 的形式定義工作流,每個節點代表一個任務,邊表示任務之間的依賴關係。這種結構使得任務的執行順序清晰,便於管理複雜的工作流程 ⌘ Read more

⤋ Read More

golang 每日一庫之 go-workflow
go-workflow 是一個基於 Go 語言開發的超輕量級工作流引擎,設計靈感來源於 Java 的 Activiti,但進行了深度簡化和解耦,特別適用於微服務架構下的流程控制需求。特點微服務架構友好 :go-workflow 僅關注流程流轉邏輯,完全解耦用戶、組織等業務數據,便於與各類系統集成。 JSON 流程定義 :採用 JSON 數組替代傳統的 BPMN 模 ⌘ Read more

⤋ Read More

golang 開發 OA 系統,工作流引擎選型
我想開發一套企業內部使用 OA 系統,使用 golang gin 開發,讓 AI 推薦了幾個流程管理的庫,即工作流引擎。發現大部分找到的都是 Java Sprint Boot 的實現,但是我還是希望用 golang gin 去實現。畢竟 golang gin 目前用的最順手,也積累了大量的內部功能庫,而且服務器資源佔用低。加上是集團內幾個公司一塊使用,使用現成的開源實現,也達不到要求,估計也很難改 ⌘ Read more

⤋ Read More

golang 每日一庫之 redsync
redsync 是一個用 Go 編寫的分佈式互斥鎖(Distributed Mutex)庫,基於 Redis 實現。其主要目標是在分佈式系統中爲多個進程或服務之間提供互斥訪問的機制,確保同一時間內只有一個客戶端可以訪問共享資源。核心功能—-redsync 實現了 Redlock 算法(由 Redis 創始人 antirez 提出),該算法旨在在分佈式環境中實現安全、健壯的鎖。基本原理使用多個獨 ⌘ Read more

⤋ Read More

golang gin 基於 Casbin 實現權限控制
最近在使用 golang gin 開發一套公司內部的人事管理系統,但是發現權限管理比之前搞的系統要複雜不少, 所以我想借機瞭解一下傳說中的 Casbin 權限控制庫,看看是否可以借鑑一下。涉及權限控制的需求場景———–人事部門負責人需要能看到所有的人事數據 人事部門的普通 HR,只能看到部分部門的人事數據。即只能看到自己負責的部門數據 IT 部門或者行政部門指定人員,能看 ⌘ Read more

⤋ Read More

支付寶證書原理和使用 Golang 集成
支付寶證書驗證機制是保障交易安全的核心環節,主要是基於 PKI(公鑰基礎設施)體系構建。其驗證流程包含以下幾個關鍵部分:1,證書體系支付寶使用兩套證書,應用證書和支付寶根證書。應用證書由開發者上傳到支付寶開放平臺,支付寶根證書用於驗證支付寶返回數據的真實性。2,簽名驗證流程請求時,開發者使用私鑰對請求參數簽名,支付寶使用應用公鑰驗證。響應時,支付寶使用私鑰對返回數據簽名,開發者使用支付寶公鑰驗證。 ⌘ Read more

⤋ Read More

Golang 接口加鎖與數據庫事務的重要性:從紅包漏洞看系統安全
在分佈式系統和高併發場景中,接口加鎖和數據庫事務處理是保障數據一致性和系統安全的關鍵機制。本文將通過一個真實的紅包系統漏洞案例,探討 Golang 中接口加鎖的實現方式、數據庫事務的正確使用方法,以及忽視這些機制可能帶來的嚴重後果。一、Golang 接口加鎖機制爲什麼需要接口加鎖?在高併發場景下,多個請求可能同時訪問通過一個資源(如用戶賬戶餘額),如果沒有適當的鎖機制,會導致競態條件,造成數據不一 ⌘ Read more

⤋ Read More

在 Go 中如何使用有限狀態機優雅解決程序中狀態轉換問題
在編程中,有限狀態機(FSM)是管理複雜狀態流轉的優雅工具,其核心在於通過明確定義狀態、事件和轉換規則,將業務邏輯模塊化。本文將探討在 Go 中如何使用有限狀態機。有限狀態機在介紹有限狀態機之前,我們可以先來看一個示例程序: https://github.com/jianghushinian/blog-go-example/blob/main/fsm/main.gopackage mainimpRead more

⤋ Read More

API 設計的 “Go 境界”:Go 團隊設計 MCP SDK 過程中的取捨與思考
大家好,我是 Tony Bai。作爲開發者,我們每天都在與 API 打交道——調用它們,設計它們,有時也會爲糟糕的 API 設計而頭痛不已。一個優秀的 API,如同一位技藝精湛的嚮導,能清晰、高效地引領我們通往復雜功能的彼岸;而一個蹩腳的 API,則可能像一座佈滿陷阱的迷宮,讓我們步履維艱。那麼,在 Go 語言的世界裏,一個 “好” 的 API 應該是什麼樣子的?它應該如何體現 Go 語言簡潔、高 ⌘ Read more

⤋ Read More

自制 ResponseWriter:Go 安全 HTTP
Go 的 http.ResponseWriter 會直接向套接字(socket)寫入數據,這可能會導致一些隱蔽的 bug,例如忘記設置狀態碼,或是在爲時已晚的時候意外修改了響應頭(header)。本文將展示如何通過包裝 ResponseWriter 來強制執行自定義規則,例如要求 WriteHeader() 以及在出錯後阻止寫入操作,從而讓你的處理器(handler)更安全、也更易於梳理邏輯。我用 ⌘ Read more

⤋ Read More

Go 語言實現優雅關機和重啓的示例很詳細
在生產環境中,服務的更新和維護是不可避免的。粗暴地終止服務會導致:正在處理的請求被中斷 數據庫事務未完成 緩存數據丟失 客戶端連接異常 本文將深入探討如何使用 Go 語言實現:優雅關機 :等待現有請求完成後再關閉服務 優雅重啓 :無縫切換新舊進程,實現零停機更新 優雅關機實現核心機制完整實現代碼package mainimport(” ⌘ Read more

⤋ Read More

Gin 服務性能提升的最佳實踐
Gin 框架是在 Go 中構建網絡服務的首選。隨着應用程序複雜性和流量的增加,性能成爲不能忽視的因素。本文將介紹一系列使用 Gin 構建服務的有效技巧,涵蓋從路由優化到內存重用、請求和響應優化、異步處理以及性能分析,幫助你創建更穩定高效的 Web 服務。路由註冊優化:避免循環引用————-Gin 的路由器使用基於樹的高效路由實現,可以快速匹配請求路徑。但是,如果路由註冊不當,例如嵌 ⌘ Read more

⤋ Read More

代碼覆蓋率新玩法:Russ Cox 教你用差異化分析加速 Go 調試
大家好,我是 Tony Bai。調試,尤其是調試並非自己編寫的代碼,往往是軟件開發中最耗時的環節之一。面對一個失敗的測試用例和龐大的代碼庫,如何快速有效地縮小問題範圍?Go 團隊的前技術負責人 Russ Cox 近期分享了一個雖然古老但極其有效的調試技術——差異化覆蓋率 (Differential Coverage)。該技術通過比較成功和失敗測試用例的代碼覆蓋率,巧妙地 “高亮” 出最可能包含 B ⌘ Read more

⤋ Read More

Golang 業務邏輯 WASM 化實踐指南
爲什麼選擇 WASM 邊緣計算?在物聯網和 5G 加速普及的當下,邊緣計算對低延遲和離線能力的需求暴增。傳統容器方案(如 Docker)在邊緣設備上面臨三大痛點:資源消耗大:x86 容器鏡像通常超過 100MB,ARM 設備運行效率低下 冷啓動慢:Node.js/Python 等解釋型語言啓動時間超過 500ms 安全風險:系統級隔離存在逃逸風險 WebAssembly(WASM ⌘ Read more

⤋ Read More

Go Wails 桌面開發之 Go 與 Preact 如何協作通信?
上一篇文章裏我們簡單的瞭解了 Wails,在本篇文章裏將帶你從 0 開始,藉助 Wails 框架構建一個前後端分離的 Todo 應用,前端用 Preact,後端使用 Go,並講解它們之間的通信機制與數據傳遞方式。閒話少說,開始今天的內容,let’s go!!!Wails 框架如何工作?—————–在 Wails 中,前端通過 WebView 渲染頁面,後端通過 Go 提供邏輯 ⌘ Read more

⤋ Read More

Go 語言中字符串四種拼接方式的性能對比,哪個更勝一籌?
在 Go 語言開發中,字符串拼接是最常見的操作之一。不同的拼接方式在性能上可能有數量級的差異,特別是在高頻調用或大數據量處理的場景下。本文將使用標準基準測試,全面對比四種主流字符串拼接方式的性能表現。測試環境與方法測試環境Go 版本:1.20+ 操作系統:macOS/Windows/Linux CPU:8 核 測試方法我們創建了一個完整的基準測試文件echobenchtest.g ⌘ Read more

⤋ Read More

Go 指針還能這麼玩?結構體方法調用竟然不用解引用!
Go 語言中的指針詳解包含字段與方法的簡化寫法————在 Go 語言中,指針是高效操作數據、避免大對象拷貝的重要工具。本文將詳細講解 Go 中指針相關的幾個關鍵概念:&:取地址 T:聲明指針類型 p:解引用指針 結構體指針可以使用 ptr.Field 和 ptr.Method() 的簡化寫法 是否支持多級指針如 *T 一、基本操作符解釋——– ⌘ Read more

⤋ Read More

從 Go 路由選擇看 “標準庫優先”:何時堅守?何時拓展?
大家好,我是 Tony Bai。最近,知名 Go 博主 Alex Edwards 更新了他那篇廣受歡迎的文章——“Which Go router should I use?1]”,特別提到了 [Go 1.22 版本對標準庫 http.ServeMux 的顯著增強。這篇文章再次引發了我們對 Go Web 開發中一個經典問題的思考:在選擇路由庫時,我們應該堅守標準庫,還是擁抱功能更豐富的第三方庫?這個 ⌘ Read more

⤋ Read More

Go 語言 從設計到優化全流程 構建高併發權重抽獎系統
在現代互聯網應用中,抽獎系統被廣泛用於營銷活動、用戶激勵等場景。一個好的抽獎系統需要滿足:公平性:確保概率分佈準確高性能:支持高併發抽獎請求安全性:防止作弊和重複中獎可擴展:支持多種抽獎活動配置本文將基於 Go 語言實現一個完整的權重抽獎系統,涵蓋核心算法、併發控制、安全防護等關鍵設計。一、系統架構設計1. 整體架構圖2. 核心組件說明二、核心算法實現1. 權重區間算法type Prize str ⌘ Read more

⤋ Read More

在 Go 中應該何時使用 panic?
如果你使用 Go 有一段時間了,可能聽說過 Go 的諺語 “don’t panic”。這句話的核心意思是:“優雅地處理錯誤,或者將錯誤返回給調用方去處理,而不是直接傳遞給內置的 panic() 函數。”儘管 “不要 panic” 是一個值得遵循的優秀準則,但有時候它被理解成“你絕對不能、絕不應該調用 panic()”。我並不這麼認爲,在某些少數情況下, panic() 是更合適的行爲。「爲什麼 p ⌘ Read more

⤋ Read More

golang 每日一庫之依賴注入庫 samber-do
do 是 Go 語言中一個輕量級的依賴注入(Dependency Injection, DI)容器,由 samber 開發。它基於 Go 1.18+ 泛型實現,爲 Go 提供了一個類型安全的 DI 方案。do 庫的設計理念是簡化服務組件之間的依賴管理,取代手工創建依賴關係的繁瑣工作,使不同組件之間鬆散耦合、更易測試與維護。與反射型 DI 框架不同,do 在註冊和解析依賴時不使用反射,因此性能開銷很 ⌘ Read more

⤋ Read More

Go 1-24 震撼發佈!這些新特性你必須知道!
一、工具鏈重大升級 🛠️————-更智能的模塊校驗機制 新版本引入了 verify 命令go mod verify -json通過結構化輸出模塊校驗結果,完美解決了開發者在持續集成(CI)流程中解析校驗結果的痛點。舊版本只能獲得簡單提示$ go mod verifyall modules verified新版本結構化輸出$ go mod verify -json{  ”Pat ⌘ Read more

⤋ Read More

精通 SOLID 原則在 Go 中的應用:編寫乾淨且可維護的代碼
在軟件開發中,構建可維護、可擴展和健壯的代碼是最終目標。SOLID 原則由 Robert C. Martin(也稱爲 Uncle Bob)提出,爲實現這一目標提供了基礎。這些原則如何應用於 Go 語言呢?Go 以其簡潔和務實著稱,讓我們來探討 Go 的慣用風格如何與 SOLID 原則對齊,從而生成乾淨、高效的軟件。單一職責原則(SRP)———–“一個類應該只有一個改變的原因。”在 G ⌘ Read more

⤋ Read More

如何在 Go 中設計並公開接口
Go 語言中的接口(interface)是其最具特色的功能之一。與許多其他語言不同,在 Go 中,類型不需要顯式聲明實現某個接口。只要一個類型定義了接口所需的方法,它就自動實現了該接口。然而,編寫良好的接口並不容易。不恰當地暴露寬泛或不必要的接口,容易污染包的 API。本文將解釋現有接口設計準則背後的邏輯,並結合標準庫中的示例進行說明。「接口越大,抽象越弱」大型接口往往難以找到多個實現類型。因此, ⌘ Read more

⤋ Read More

Go 開發者必知:五大緩存策略詳解與選型指南
大家好,我是 Tony Bai。世界讀書日贈書活動火熱進行中,快快參與,也許你就是那個幸運兒。在構建高性能、高可用的後端服務時,緩存幾乎是繞不開的話題。無論是爲了加速數據訪問,還是爲了減輕數據庫等主數據源的壓力,緩存都扮演着至關重要的角色。對於我們 Go 開發者來說,選擇並正確地實施緩存策略,是提升應用性能的關鍵技能之一。目前業界主流的緩存策略有多種,每種都有其獨特的適用場景和優缺點。今天,我們就 ⌘ Read more

⤋ Read More

『八股文™』詳解 Go 中的深拷貝與淺拷貝
大家好,我是 moooofly。今天我們來聊一聊:Go 語言中關於深拷貝和淺拷貝的問題。0x01 基礎概念在 Go 語言中,針對如下結構體,如何對其進行淺拷貝和深拷貝?代碼示例如下上述問題的核心在於:需要理解 Go 語言中的值類型和引用類型   需要知道 Go 語言中哪些類型可以直接通過賦值完成安全拷貝,哪些類型需要做深拷貝處理 需要知道如何手動處理嵌套結構中的指針類型,以及需要通過 ⌘ Read more

⤋ Read More

使用 Go 構建一個高性能鍵值存儲
我們知道 Redis 是一個高性能的鍵值存儲,如果我們要實現一個高性能的鍵值存儲,嵌入在我們的 Go 應用程序中,那麼這個庫可能會幫助到你。Bolt 是一個由 Go 語言編寫的嵌入式鍵值對數據庫引擎,其核心設計目標是提供簡單、快速且可靠的數據存儲能力。目前,作爲 BoltDB 的優化分支(etcd-io/bbolt), 它尤其適用於需要事務支持和高併發讀寫的應用場景,如配置文件存儲、緩存系統和小型 ⌘ Read more

⤋ Read More

Golang 日誌實時告警實現方案(Windows-Linux-Debian)
在 Golang 中實現跨平臺的日誌實時告警,可以通過以下幾種方式實現:通用實現方案1. 使用日誌監控庫package mainimport(“log”“os”“time”“github.com/hpcloud/tail”// 跨平臺文件跟蹤”github.com/robfig/cron”// 定時任務)funcsetupLogMonitor(logPath string){ t, err := ⌘ Read more

⤋ Read More

使用 Go 進行 HTTP 流量重放測試
在 Web 安全測試、API 調試、流量回歸測試中,HTTP 流量重放(HTTP Traffic Replay)是一項重要的技術。它可以幫助我們復現問題、測試系統兼容性、進行安全研究等。在這篇文章中,我們將簡單探討 HTTP 流量重放的原理,並通過 Go 語言實現不同的流量重放方案,同時介紹常見的開源工具。(身爲一個在小公司裏的網安牛馬,總得幹些雜活🐂🐎)HTTP 流量重放的原理HTTP 流量重放 ⌘ Read more

⤋ Read More

Go:終於有了處理未定義字段的實用方案
衆所周知,Go 裏沒有 undefined,只有各類型的零值。多年來,Go 開發者一直依賴 JSON 結構標籤 omitempty 來解決 “字段可能缺失” 這一需求。然而omitempty 並不能覆蓋所有場景,而且常常讓人抓狂——到底什麼算 “空”?定義本就含糊不清。在 編碼(marshal) 時:切片和 map 只有在爲 nil 或長度爲 0 時纔算空。 指針只有 nil 時爲空。 ⌘ Read more

⤋ Read More

用 Go 語言開發一個石頭剪刀布遊戲,很簡單
本文將通過 Go 語言實現一個玩家與電腦對戰的石頭剪刀布遊戲,並重點講解如何通過 Go 的 crypto/rand 包生成安全的隨機數,確保遊戲的公平性。一、遊戲模型設計在編寫代碼之前,我們首先要設計遊戲的基本模型,包括參與者、動作和遊戲狀態。1. 用戶與動作遊戲的參與者有兩個:玩家和電腦。每個參與者可以做出三種選擇:石頭、剪刀或布。我們通過 Go 的枚舉類型來表示這些選擇。// 用戶類型type ⌘ Read more

⤋ Read More

Weightedrand:Go 權重隨機選擇
weightedrand (github.com/mroth/weightedrand) 是一個 Go 語言實現的權重隨機選擇庫,可以從一個元素列表中以不同的概率選擇一個元素,也就是所謂的加權隨機選擇(weighted random selection)。你可以爲每個元素設置 “權重”(可以理解爲概率的相對值),然後根據這些權重進行隨機選擇。安裝go get github.com/mroth/we ⌘ Read more

⤋ Read More

靜態程序分析入門之 Go 實踐筆記
編譯與靜態分析的關係在 Introduction to the Go compiler[5] 也能看到相似的流程,靜態分析主要發生在 IR 層,生成機器碼後端部分 (back-end) 那就是編譯器所考慮的了。• 詞法分析器(Scanner)結合正則表達式 (Regular Expression) ,通過詞法分析(Lexical Analysis)將源碼翻譯爲 token。 • 語法分析器( ⌘ Read more

⤋ Read More

Go 利用 github-com-miekg-dns 進行安全分析與防護
在網絡安全領域,DNS(域名系統)是攻擊者和防禦者都非常關注的目標。攻擊者可以利用 DNS 進行隧道通信、數據滲透、欺騙攻擊,而安全專家則需要檢測和防禦這些威脅。本文將簡單地介紹 github.com/miekg/dns 庫,並通過代碼演示如何利用它進行 DNS 監控、流量分析和攻擊檢測。miekg/dns 介紹miekg/dns 是 Go 語言中比較流行的 DNS 解析庫之一,它支持:自定義 D ⌘ Read more

⤋ Read More

ChanX:Go 構建無限緩衝通道
chanx (github.com/smallnest/chanx) 一個用環形緩衝區(ringbuffer)實現的無界通道(unbounded channel)的 Go 語言庫。它非常適合在需要異步處理、生產者快於消費者、或對標準通道容量受限(如 make(chan T, N))感到不滿足的場景中使用。爲什麼需要 Unbounded Channel?Go 原生的 chan 是有限容量的:默認是阻 ⌘ Read more

⤋ Read More

基於 Golang 和 WebSocket 實現屏幕共享方案
在遠程協作、在線教學、監控等場景中(當然啦!還有其他的用途,這裏就不說了,懂得都懂),屏幕共享是一項非常重要的技術。本文將介紹如何使用 Golang 開發一個基於 WebSocket 的屏幕共享系統,實現遠程查看電腦屏幕的功能。技術原理整個屏幕共享的流程如下:定時截圖:使用kbinani/screenshot 進行屏幕捕獲,每隔 100ms 採集一次屏幕。 圖片壓縮:爲了減少數據傳輸量,將截 ⌘ Read more

⤋ Read More

Go 1-24 讓項目工具管理更優雅的 tool 指令
工具管理的歷史難題———在 Go 1.24 之前,管理項目依賴的工具(如 linters、代碼生成器等)是一個棘手的問題。雖然有 go.mod 來管理代碼依賴,但工具依賴卻沒有一個官方的解決方案。社區曾流行的做法是創建一個名爲 tools.go 的文件,通過一種 “技巧” 來管理這些工具依賴://go:build toolspackage toolsimport (     ”gol ⌘ Read more

⤋ Read More

Go 定時任務調度從入門到實戰
在開發後臺服務時,我們經常需要處理定時任務。例如每天凌晨備份數據、每 5 分鐘檢查服務狀態、每小時發送統計報表…這些場景都需要可靠的定時任務調度機制。Go 語言就提供了強大的定時任務處理能力,既有標準庫的基礎功能,也有企業級的第三方解決方案。一、標準庫基礎用法———1. 簡單的單次延遲任務timer := time.NewTimer(3  time.Second) // 3秒後 ⌘ Read more

⤋ Read More

Badu-bus:Go 輕量級泛型發佈 - 訂閱事件總線
badu/bus (github.com/badu/bus) 是一個 Go 語言基於泛型實現的輕量級發佈 - 訂閱(Pub/Sub)事件總線庫。它允許不同的組件通過事件機制進行解耦通信,而不需要直接調用彼此的函數。它解決了什麼問題?組件解耦:發佈者和訂閱者彼此無感知,更靈活、可擴展,便於測試。 異步消息:消息可以異步發送和接收,提高系統性能和響應速度。 模塊化:有利於將系統拆分爲更小、 ⌘ Read more

⤋ Read More

使用 Go 實現零停機處理數百萬個 WebSocket 連接
引言 —想象一下這樣的場景:你剛剛上線了一款實時聊天應用,用戶數量快速攀升至數十萬。然而,每次服務更新都會導致所有用戶連接斷開,他們需要手動刷新頁面才能重新連接。用戶反饋很差,因爲重要的消息會在服務更新期間丟失。這是一個經典的問題 —— 如何在不中斷服務的情況下更新和擴展 WebSocket 應用?WebSocket 技術爲現代 Web 應用提供了雙向實時通信能力,廣泛應用於聊天應用、遊戲、 ⌘ Read more

⤋ Read More

用 Go 語言打造高併發 MCP 服務器:理論、實戰與 AI 應用全景探索
在這個 AI 與大數據時代,構建一個高性能、可擴展的 MCP(Modular/Model Context Protocol)服務器已成爲打通應用與 AI 模型之間數據孤島的重要橋樑。本文將帶你深入瞭解 MCP 協議的設計理念、使用 Go 語言實現 MCP 服務器的詳細流程,以及 MCP 如何爲 AI 應用提供類似 USB-C 接口般的統一連接能力。 “MCP 提供統一的數據交換框架,幫助企業實 ⌘ Read more

⤋ Read More

如何用 go 搭建 MCP 服務
什麼是 MCP?———–MCP 是 “模型上下文協議(Model Context Protocol)” 的簡稱,用一句簡單通俗易懂的話描述:是一種讓 AI 模型能夠無縫連接到外部工具和數據源的標準化方式。想象它就像 AI 的“萬能接口”,能讓 AI 像用 USB 線連接設備一樣,輕鬆調用其他程序或服務。官方 MCP 架構圖————-MCP Hosts: 是指 LLM ⌘ Read more

⤋ Read More

在 Go 中使用 Redis 管道提升性能
Redis 管道簡介 ———–Redis 的管道是一種優化技術,允許客戶端一次性發送多個命令到服務器,而無需逐一等待響應。服務器執行完所有命令後,再一次性返回所有結果。簡單來說,就是從 “一個一個送信” 變成“打包快遞”,大大減少了網絡通信的次數。來看看直觀的對比:無管道:發送命令 1,等待響應;發送命令 2,等待響應…… 每次都跑一個來回。 有管道:把命令 1、2、3 打包 ⌘ Read more

⤋ Read More

用 Go 語言輕鬆構建 MCP 客戶端與服務器
★ 該文章已被 Model Context Protocol(MCP) 中文教程講解  收錄,歡迎 star 收藏。 若想獲取可執行的完整項目代碼,可關注本公衆號,回覆 MCP。前言模型上下文協議(Model Context Protocol,簡稱 MCP)是一種開放標準,旨在標準化大型語言模型(LLM)與外部數據源和工具之間的交互方式。隨着 MCP 越來越受歡迎,Go MCP 庫 ⌘ Read more

⤋ Read More

golang 每日一庫之 aceld-zinx
aceld/zinx 是一個基於 Go 語言開發的輕量級、高併發 TCP 服務器框架,專注於簡化遊戲服務器、長連接應用及消息中轉服務的開發。其設計目標是提供清晰的結構和高度可擴展性,幫助開發者快速構建高性能網絡服務。以下從核心特性、架構設計、應用場景等方面詳細介紹:一、核心特性輕量級與高併發 基於 Go 的 Goroutine 協程模型,實現高效併發處理,支持海量連接。 提供線程池(W ⌘ Read more

⤋ Read More

極簡 HTTP 客戶端,Resty 如何讓 Golang 請求效率翻倍?
Resty 是一個基於 Golang 標準庫 net/http 構建的高效、易用的 HTTP 客戶端庫。它通過鏈式調用、自動化處理和豐富的擴展功能,極大簡化了 HTTP 請求的發送與響應處理流程,尤其適合與 RESTful API 交互的場景。Resty 的核心優勢———–鏈式調用:支持直觀的鏈式語法,提升代碼可讀性。自動序列化:輕鬆將結構體轉爲 JSON/XML,自動解析響應內容。 ⌘ Read more

⤋ Read More

Go - MCP SDK 新玩法:實現海報生成 MCP Server 與 DeepChat 無縫集成
DeepChat 是國內主導的一個非常優秀的智能助手,開源 2 個月,已經收穫 1k+ 的粉絲關注,最近聽說新版本已經支持 MCP,迫不及待開始嚐鮮。但做個什麼插件好了,無意看到阿里雲的 “創意海報生成” 接口文檔,索性給 DeepChat 添加一個 “海報生成” 的功能。構建 MCP Server 看過我前面文章的小夥伴應該知道,我以前一般使用 mark3labs/mcp-go 這個庫,但發現國 ⌘ Read more

⤋ Read More

Go 語言新版的迭代器是怎麼個事
很多流行的編程語言中都以某種方式提供迭代器,其中包括 C++、Java、Javascript、Python 和 Rust。Go 語言現在也加入了迭代器。iter 包是 Go 1.23 新增的標準庫,提供了迭代器的基本定義和相關操作。爲什麼需要迭代器——–在 Go 1.18 引入泛型之後,便可以很方便的定義一些泛型容器類型來提升編碼效率。例如我們可以基於 map 類型定義了一個集合類型—— ⌘ Read more

⤋ Read More

利用 Katana 作爲 Go 庫實現高性能 Web 爬蟲
在信息收集、安全測試等領域,高性能、高併發的 Web 爬蟲工具是核心基礎設施之一。ProjectDiscovery 出品的 Katana 是一個基於 Golang 編寫的輕量級爬蟲,它默認以 CLI 工具形式提供。但實際上,它也可以作爲庫被直接集成進你的 Go 項目中,從而實現更靈活的定製。本文將介紹:Katana 的設計理念與功能,如何將 Katana 作爲庫引入到我們的項目當中,如何編寫自定義 ⌘ Read more

⤋ Read More

golang 每日一庫之高性能無鎖隊列 bruceshao-lockfree
bruceshao/lockfree 是一個基於 Go 語言實現的高性能無鎖隊列庫,旨在通過無鎖(Lock-Free)算法提升多線程環境下的併發性能。其設計靈感來源於 Java 的 Disruptor 框架,但針對 Go 語言的特性進行了優化,適用於高吞吐量、低延遲的場景,如實時數據處理、高頻交易系統等。以下是該庫的核心特性、實現原理、性能對比及使用場景的詳細分析:核心特性無鎖設計基於 CAS(C ⌘ Read more

⤋ Read More

效率工具:使用 air 熱重載 Go 應用程序
在項目開發階段,熱重載技術非常有用,通過熱重載,可以實現在無需手動干預的情況下,修改代碼文件後,自動重啓 Go 應用。這極大地提升了開發體驗,同時也節約了我們的開發時間。本文我們一起來體驗一下使用 air 熱重載 Go 應用程序,提高開發效率。簡介air 是爲 Go 應用開發設計的一款支持熱重載的命令行工具。以下是 air 官方總結的特色:• 彩色的日誌輸出 • 自定義構建或必要的命令 ⌘ Read more

⤋ Read More

Go API 中的上下文取消機制
在分佈式系統和微服務架構中,高併發請求和資源管理是每個開發者必須面對的挑戰。尤其是在處理長時間運行的任務時,如何實現優雅的取消和超時控制,直接關係到系統的穩定性和用戶體驗。Go 語言通過context包提供了一套標準化的解決方案,本文將深入探討其核心用法與最佳實踐。 上下文(Context)的本質與作用——————context.Context是 Go 語言中用於傳遞請求範 ⌘ Read more

⤋ Read More

使用 Golang-WebSocket 實現按鍵記錄
在 Web 開發和安全研究中,監聽用戶輸入是一項重要的功能,比如在在線代碼編輯器、遊戲按鍵綁定或快捷鍵管理中,我們可能需要記錄用戶的按鍵輸入。本文將介紹如何使用 Golang + WebSocket 實現一個簡單的按鍵記錄系統。按鍵監聽的原理在 Web 端,我們可以使用 JavaScript 的事件監聽器來捕獲用戶的鍵盤輸入事件。JavaScript 提供了 keydown、keypress 和 ⌘ Read more

⤋ Read More

使用 Go 構建併發的 KV 存儲系統
帶你使用 Go 編寫一個簡單的 KV 存儲系統,使用Fiber框架,支持併發操作並實現 TTL 功能。通過本教程,你可以:瞭解 KV 存儲的底層工作原理 瞭解 CRUD 如何實現 瞭解併發處理,比如鎖的使用 瞭解 TTL 功能如何實現 初始化項目——–首先,創建一個新的項目目錄並進行初始化:go mod init mszluKV安裝依賴——-//fiber ⌘ Read more

⤋ Read More

基於 Go 構建百萬級反向代理服務
在現今 Web 開發中,高效安全地管理海量流量是系統架構設計的核心命題。反向代理作爲客戶端與後端服務之間的智能調度器,已成爲應對高併發場景的利器。1. 反向代理反向代理是一種位於服務器端的代理服務器,它代表後端服務器接收客戶端的請求,並將請求轉發到內部網絡中的實際服務器,最終將服務器的響應返回給客戶端。負載均衡:通過輪詢 / 加權算法分發請求至多臺後端服務器 安全防護盾:隱藏真實服務器 IP ⌘ Read more

⤋ Read More

使用 Go 實現服務端事件推送 SSE
背景–在對內部 CRM 項目進行優化時,我們發現項目中的站內信功能目前採用了 WebSocket 來實現消息推送。然而,對於站內信這種低頻的推送場景來說,維護一個長連接的成本相對較高。WebSocket 通常用於需要實時雙向通信的應用,而我們需要的只是簡單的單向推送。經過考慮,我們決定使用一種更輕量級的技術——Server-Sent Events(SSE)來實現站內信的推送。這種技術不僅可以減 ⌘ Read more

⤋ Read More

使用 Go 進行 SSH 隧道:輕鬆構建安全通道
使用 Go 進行 SSH 隧道:輕鬆構建安全通道 ————————-SSH 隧道常常被用來安全地穿越防火牆、保護數據傳輸以及遠程訪問受限服務。本文將帶你一步步瞭解如何用 Go 語言搭建一個 SSH 隧道,並結合實際案例分享一些個人經驗和最佳實踐,讓你輕鬆上手這一強大工具。 什麼是 SSH 隧道? —————SSH 隧道(SSH Tunnel)是 ⌘ Read more

⤋ Read More

搞懂常見 Go ORM 系列 - Ent 框架詳解
在 Go ORM 開篇中我們將 Go ORM 框架分成了三類🌲 反射型主要通過反射機制將結構體映射到數據庫表上,代表作爲 go-gorm/gorm🌲 代碼生成型通過代碼生成工具預先生成數據模型及查詢構建器,代表作有 ent/ent 和日益流行的 go-gorm/gen🌲 SQL 增強型基於原生 SQL 庫進行封裝和擴展,既保留 SQL 的靈活性,又提供了一系列便捷函數,代表作爲 jmoiron/s ⌘ Read more

⤋ Read More

Go 語言錯誤處理:Panic 與 Error 的抉擇
在 Go 語言的開發實踐中,錯誤處理機制是構建健壯應用程序的核心要素。與其他語言不同,Go 通過顯式的錯誤返回和獨特的 panic/recover 機制形成了獨特的錯誤處理哲學。本文將深入探討 panic 與 error 的本質區別,並通過實際場景分析幫助開發者做出正確的技術選擇。 錯誤處理機制的核心差異———–Error 的顯式傳遞特性Go 語言將 error 定義爲內置接口類型, ⌘ Read more

⤋ Read More

Go 1-25:工具鏈優化與運行時改進
Go 語言自誕生以來,始終保持着穩定的迭代節奏。2025 年 8 月即將發佈的 Go 1.25 版本在工具鏈、運行時、編譯器及標準庫等方面都帶來了值得關注的改進。本文將從實際開發角度出發,詳細解析這些變化的技術細節及其對開發者產生的實際影響。工具鏈增強—–構建系統優化go build命令的-asan選項在 1.25 版本中默認啓用了內存泄漏檢測機制。該功能會在程序退出時自動檢查未釋放的 C ⌘ Read more

⤋ Read More

Go 語言中 Redis 管道的性能潛力
在現代分佈式系統架構中,Redis 憑藉其卓越的性能表現已成爲不可或缺的緩存和數據存儲組件。但在高併發場景下,如何突破網絡 I/O 瓶頸成爲開發者面臨的重要挑戰。本文將深入探討 Go 語言中 Redis 管道的實現原理,並通過詳實的代碼示例展示其性能優化之道。Redis 交互模式的演進之路—————傳統 Redis 客戶端的工作模式遵循 “請求 - 響應” 的同步範式。當執行S ⌘ Read more

⤋ Read More

golang 每日一庫之 base64Captcha
今天要介紹的庫 mojocn/base64Captcha 是一個用於 Go 語言的高效驗證碼生成庫,支持圖片、音頻等多種驗證碼格式,並且可以通過 base64 編碼輸出,方便前端直接使用。該庫廣泛用於 Web 應用、REST API 以及需要身份驗證的系統中,以增強安全性。主要功能——–支持多種驗證碼類型數字驗證碼 (DriverDigit):僅包含數字,適用於一般驗證碼場 ⌘ Read more

⤋ Read More

golang 每日一庫之 go-pinyin
go-pinyin 漢字轉拼音庫今天要介紹的庫是一個拼音庫,這個庫相對比較冷門,但是開發過母嬰類 app 的道友可能知道。go-pinyin 是一個用於將漢字轉換爲拼音的 Golang 庫,提供多種模式,支持帶音調、無音調、首字母提取等功能。該庫適用於拼音搜索、漢字排序、文本轉換等場景。安裝——使用 go get 下載安裝:go get -u github.com/mozillazg/go ⌘ Read more

⤋ Read More

使用 Go 構建 MCP Server
一、MCP 介紹 ———1. 基本介紹 MCP(Model Context Protocol,模型上下文協議)是由 Anthropic 公司(Claude 大模型的創造者)於 2024 年 11 月推出的一種開放標準協議,旨在統一大型語言模型(LLM)與外部數據源和工具之間的通信方式。MCP 的核心目標是解決當前 AI 應用開發中的數據孤島和碎片化集成問題。2. 協議特點 MCP 可以 ⌘ Read more

⤋ Read More

WebSockets 在 Go 中的應用:從基礎到實踐
WebSockets 提供了一種強大的雙向通信方式,使客戶端(如 Web 瀏覽器)與服務器能夠實時交換數據。與傳統的 HTTP 請求 - 響應模型不同,WebSockets 允許全雙工通信,即客戶端和服務器可以隨時獨立發送和接收消息。因此,WebSockets 非常適合用於聊天應用、實時數據推送和交互式遊戲等場景。在本篇文章中,我們將使用 Gin 框架和 gorilla/websocket 庫,搭 ⌘ Read more

⤋ Read More

構建可維護的 Go 項目:整潔架構實踐指南
在快速迭代的軟件開發過程中,如何構建長期可維護的代碼庫始終是開發者面臨的重大挑戰。本文將以 Go 語言爲例,深入探討整潔架構(Clean Architecture)的核心思想及其在工程實踐中的具體實現方式。通過系統性分層、接口隔離和依賴管理,我們將展示如何打造具備高可測試性、低耦合度的現代化 Go 項目。 整潔架構的核心設計原則———–整潔架構由 Robert C. Martin 提 ⌘ Read more

⤋ Read More

爲什麼 Go 語言的錯誤處理其實設計得很好
Go 的臭名昭著的錯誤處理 [1] 引起了編程語言圈外人士的廣泛關注,常常被認爲是該語言最具爭議的設計決策之一。如果你瀏覽 Github 上任何一個用 Go 編寫的項目,幾乎可以保證你會看到以下代碼行比代碼庫中的其他部分出現得更頻繁:if err != nil {    return err}對於剛接觸這門語言的人來說,這可能顯得多餘且不必要,但 Go 將錯誤視爲一等公民(值)的原因,深深植根於編 ⌘ Read more

⤋ Read More

Go Http 框架性能測評: Fiber vs- Gin vs- Go 標準庫
本內容是對知名性能評測博主 Anton Putra  Fiber vs. Gin vs. Go (stdlib): Performance (Latency - Throughput - Saturation - Availability)[1]: Performance (Latency - Throughput - Saturation - Availability) 內容的翻譯與整理, 有適 ⌘ Read more

⤋ Read More

從 Shell 到 Go:腳本編寫的優雅進化
你有沒有想過,寫腳本這件事,可能不再需要依賴 Unix Shell 了?別誤會,Shell 確實是個 “魔法工具”,能用一行命令完成許多複雜任務。但如果你是 Go 語言的愛好者,或者正在尋找一種更現代化、更高效的腳本編寫方式,那麼今天這篇文章絕對會讓你眼前一亮!我們將深入探討如何用 Go 語言結合script包,輕鬆實現原本需要 Shell 才能完成的任務。不僅代碼更優雅,還能跨平臺運行,甚至 ⌘ Read more

⤋ Read More

golang 每日一庫之 gopsutil
shirou/gopsutil 是一個用 Go 語言實現的跨平臺系統信息採集庫,其設計靈感來源於 Python 的 psutil。它爲開發者提供了一套統一、簡潔的 API,用於獲取底層操作系統的各項指標數據,如 CPU、內存、磁盤、網絡、主機信息以及進程狀態等。下面我們將從多個方面詳細介紹這個庫的功能、設計特點、使用示例以及應用場景。庫簡介——跨平臺支持 gopsutil ⌘ Read more

⤋ Read More

使用 Golang-OpenCV 獲取攝像頭視頻流: 從原理到實踐
在現代計算機視覺應用中,實時視頻處理是一個重要的功能,例如監控系統、人臉識別、手勢檢測等。而 Go 語言結合 OpenCV 可以高效地實現攝像頭數據的採集和處理。在本篇文章將會簡單的講解,OpenCV 處理視頻流的基本步驟,原理和如何使用 gocv 這個庫來讀取攝像頭畫面。安裝 OpenCV因爲我用的是 mac 電腦所以,我使用 homebrew 進行 opencv 的安裝,其他平臺例如 arch ⌘ Read more

⤋ Read More

Golang 擴展 osquery,讓系統查詢更強大!
在深圳有很多老闆都很奇葩,比如我的前老闆,需求是半夜給的,效果是要早上看到的,我要感謝我的的前老闆,讓我接觸到了聞所未聞的新奇技術。今天要分享的內容是 osquery 這個東西,不知道各位萬能的網友們知不知道。osquery 是一個強大的開源工具,它能讓我們像查詢數據庫一樣獲取操作系統信息。而 osquery-go 則是官方提供的 Golang SDK,可以讓我們擴展 osquery,添加自定義查 ⌘ Read more

⤋ Read More

使用 Go 實現 License 認證
在軟件授權管理中,License 機制可以有效防止未授權使用,確保軟件的合法性。本篇文章將講解如何使用 Go 生成機器碼、創建 License、驗證 License 及防止時間篡改,並提供完整可運行代碼示例,以讓您理解其中的邏輯。License 機制概述在軟件授權體系中,License(許可證)是用於驗證軟件的合法使用權限的一種機制。常見 License 設計包含以下關鍵要素:機器碼:用於唯一標識 ⌘ Read more

⤋ Read More

chromem-go:Go 語言 RAG 應用的高效輕量級向量數據庫
前言在開發 RAG(Retrieval-Augmented Generation)應用時,起初你可能更傾向於選擇一款輕量級的向量數據庫,而非複雜的大型數據庫。例如,在關係型數據庫的選擇上,許多人會更願意使用 SQLite 而不是 PostgreSQL 或 MySQL,以減少額外的配置和維護成本。在 Go 語言中,chromem-go 提供了一種簡潔高效的解決方案——它是一款可嵌入到 Go 程序中的 ⌘ Read more

⤋ Read More

golang 每日一庫之 volatiletech-authboss
Authboss 是一個強大且可擴展的 Go 語言認證(authentication)和授權(authorization)框架,適用於 Web 應用程序。它提供了一套完整的用戶身份驗證方案,包括用戶註冊、登錄、註銷、賬號恢復、密碼重置、OAuth2、雙因素認證(2FA)等功能,使開發者能夠快速構建安全的身份認證系統。核心特性——–模塊化設計 :Authboss 由多個獨立的 ⌘ Read more

⤋ Read More

如何使用 go:linkname 指令訪問 Go 包中的私有函數
在 Go 語言的包設計中,函數和變量通過首字母大小寫來嚴格區分導出(exported)與未導出(unexported)的可見性規則。這種機制是 Go 模塊化設計的基石,但同時也爲底層系統級開發帶來了限制。//go:linkname 指令正是 Go 爲突破這一限制預留的「後門」,它通過編譯器的符號重定向能力,允許開發者直接鏈接任意包的未導出符號——無論是標準庫的私有函數,還是第三方包的隱藏變量。本文 ⌘ Read more

⤋ Read More

Go 語言 TCP 服務構建:原理到工程實踐
在分佈式系統架構中,傳輸層協議扮演着關鍵角色。作爲可靠傳輸的代表,TCP 協議通過三次握手建立連接、滑動窗口流量控制、序列號確認機制等技術,爲上層應用提供了有序且可靠的數據傳輸通道。這種面向連接的協議特性,使其成爲實時通信、文件傳輸、遠程控制等場景的首選方案。Go 語言自誕生之初就將網絡編程能力作爲核心設計目標。其標準庫中完善的 net 包提供了跨平臺的網絡 I/O 接口,結合輕量級線程 goro ⌘ Read more

⤋ Read More

golang 每日一庫之 fatih-color
fatih/color 是一個流行的 Go 語言庫,用於在終端中輸出彩色文本和樣式化的內容。由開發者 Fatih Arslan 創建,它簡化了 ANSI 轉義碼的使用,使開發者能夠輕鬆爲 CLI 工具、日誌系統等添加顏色和樣式。特點豐富的顏色和樣式支持 顏色 :支持 16 種基礎前景色(如紅色、綠色)和背景色。 樣式 :支持加粗(bold)、斜體(itali ⌘ Read more

⤋ Read More

用 Go 構建跨平臺桌面應用:Wails 框架的深度實踐指南
在桌面應用開發領域,Electron 等基於 Web 技術的方案長期佔據主導地位,但其資源消耗問題始終是開發者心中的痛點。Go 語言的高效性和簡潔性爲這個問題提供了新的解題思路,而 Wails 框架正是這種思路的具象化體現。Wails 框架的核心價值在於將 Go 的後端能力與現代化前端技術無縫結合。通過內置的 Vite 支持,開發者可以自由選擇 React、Vue 或 Svelte 等前端框架,同 ⌘ Read more

⤋ Read More

Go 語言中的 LangGraph:基於 LangGraphgo 的 AI 任務編排
在 AI 任務編排領域,LangChain 提供了 LangGraph,幫助開發者搭建複雜、多步驟、有狀態的 AI 工作流。但這個庫主要基於 Python,而在 Go 語言生態中,如何實現類似的 AI 任務編排呢?今天,我們來介紹 langgraphgo,一個爲 Golang 量身定製的 AI 任務流管理框架。通 langgraphgo,你可以高效地構建 AI 代碼審計、對話系統、多智能體協作等應 ⌘ Read more

⤋ Read More

golang 每日一庫之 jinzhu-now
jinzhu/now 是一個用於增強 Go 語言時間處理的第三方庫,它基於標準庫 time 進行了擴展,提供了更便捷的時間操作功能,適用於需要頻繁處理時間區間、時區轉換或複雜時間解析的場景。以下是該庫的核心功能和用法詳解:一、核心功能時間區間的便捷計算now 庫提供了快速獲取時間區間(如某分鐘的開始 / 結束、某周的開始 / 結束等)的方法,無需手動計算。例如: import ⌘ Read more

⤋ Read More

gogen:一鍵生成 Go 項目,開發者的效率利器
在 Go 開發中,手動搭建項目結構是不是讓你覺得效率低下?有沒有想過一個工具能一鍵搞定模板生成,像 Rust 的 cargo generate 那樣簡單?我開發的 gogen 就是爲此而生——輕量、靈活,專爲 Go 開發者打造。幾秒鐘內,你就能擁有一個定製化的項目骨架。接下來,讓我帶你看看它有多實用!gogen 是一個 Go 項目生成工具,靈感源自 Rust 的 cargo generate,旨在 ⌘ Read more

⤋ Read More