golang 每日一庫之工作流引擎 Temporal
Temporal 是一個開源的分佈式工作流編排系統,旨在簡化構建和運行可靠、可擴展的長時間運行的後端應用程序。它最初是由 Uber 的 Cadence 系統演變而來,現在由 Temporal Technologies 公司主導開發。目前已被 Coinbase、Netflix、Box、Snap 等大規模應用。核心功能—-1. 分佈式工作流編排Temporal 支持在多臺機器上協調執行復雜的業務邏 ⌘ 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
golang 基礎之 errgroup
Golang 的擴展併發庫 golang.org/x/sync/errgroup 提供了對多協程任務進行管理和錯誤處理的便利功能。與基礎的 sync.WaitGroup 相比,errgroup.Group 在等待所有任務完成的同時,還會自動捕獲第一個非 nil 錯誤並返回。如果通過 WithContext 創建 Group,當任一子任務返回錯誤時,errgroup 會取消關聯的 Context,從 ⌘ 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
golang 每日一庫之 goflow
goflow 是一個基於 Go 語言的高性能、可擴展、分佈式的工作流框架。它允許開發者以編程方式將分佈式工作流定義爲任務的有向無環圖(DAG),並通過多個工作節點(Worker)均勻分配負載來執行任務。核心特性—-1. DAG 構建與任務編排goflow 允許用戶以 DAG 的形式定義工作流,每個節點代表一個任務,邊表示任務之間的依賴關係。這種結構使得任務的執行順序清晰,便於管理複雜的工作流程 ⌘ Read more
golang 每日一庫之 go-workflow
go-workflow 是一個基於 Go 語言開發的超輕量級工作流引擎,設計靈感來源於 Java 的 Activiti,但進行了深度簡化和解耦,特別適用於微服務架構下的流程控制需求。特點微服務架構友好 :go-workflow 僅關注流程流轉邏輯,完全解耦用戶、組織等業務數據,便於與各類系統集成。 JSON 流程定義 :採用 JSON 數組替代傳統的 BPMN 模 ⌘ Read more
golang 開發 OA 系統,工作流引擎選型
我想開發一套企業內部使用 OA 系統,使用 golang gin 開發,讓 AI 推薦了幾個流程管理的庫,即工作流引擎。發現大部分找到的都是 Java Sprint Boot 的實現,但是我還是希望用 golang gin 去實現。畢竟 golang gin 目前用的最順手,也積累了大量的內部功能庫,而且服務器資源佔用低。加上是集團內幾個公司一塊使用,使用現成的開源實現,也達不到要求,估計也很難改 ⌘ Read more
golang 每日一庫之 redsync
redsync 是一個用 Go 編寫的分佈式互斥鎖(Distributed Mutex)庫,基於 Redis 實現。其主要目標是在分佈式系統中爲多個進程或服務之間提供互斥訪問的機制,確保同一時間內只有一個客戶端可以訪問共享資源。核心功能—-redsync 實現了 Redlock 算法(由 Redis 創始人 antirez 提出),該算法旨在在分佈式環境中實現安全、健壯的鎖。基本原理使用多個獨 ⌘ Read more
golang gin 基於 Casbin 實現權限控制
最近在使用 golang gin 開發一套公司內部的人事管理系統,但是發現權限管理比之前搞的系統要複雜不少, 所以我想借機瞭解一下傳說中的 Casbin 權限控制庫,看看是否可以借鑑一下。涉及權限控制的需求場景———–人事部門負責人需要能看到所有的人事數據 人事部門的普通 HR,只能看到部分部門的人事數據。即只能看到自己負責的部門數據 IT 部門或者行政部門指定人員,能看 ⌘ Read more
支付寶證書原理和使用 Golang 集成
支付寶證書驗證機制是保障交易安全的核心環節,主要是基於 PKI(公鑰基礎設施)體系構建。其驗證流程包含以下幾個關鍵部分:1,證書體系支付寶使用兩套證書,應用證書和支付寶根證書。應用證書由開發者上傳到支付寶開放平臺,支付寶根證書用於驗證支付寶返回數據的真實性。2,簽名驗證流程請求時,開發者使用私鑰對請求參數簽名,支付寶使用應用公鑰驗證。響應時,支付寶使用私鑰對返回數據簽名,開發者使用支付寶公鑰驗證。 ⌘ Read more
Golang 接口加鎖與數據庫事務的重要性:從紅包漏洞看系統安全
在分佈式系統和高併發場景中,接口加鎖和數據庫事務處理是保障數據一致性和系統安全的關鍵機制。本文將通過一個真實的紅包系統漏洞案例,探討 Golang 中接口加鎖的實現方式、數據庫事務的正確使用方法,以及忽視這些機制可能帶來的嚴重後果。一、Golang 接口加鎖機制爲什麼需要接口加鎖?在高併發場景下,多個請求可能同時訪問通過一個資源(如用戶賬戶餘額),如果沒有適當的鎖機制,會導致競態條件,造成數據不一 ⌘ Read more
Goreleaser: 快速創建 Golang 項目發佈頁面
原文鏈接: https://typonotes.com/posts/2025/05/19/goreleaser-release-app-in-github/項目可以通過 renovate-bot 進行以來變更管理, 當依賴內容變化後, 可以幫助我們創建 PR。https://github.com/tangxin/k8s-image-syncer/pullsgoreleaser 可以爲 go 項 ⌘ Read more
在 Go 中如何使用有限狀態機優雅解決程序中狀態轉換問題
在編程中,有限狀態機(FSM)是管理複雜狀態流轉的優雅工具,其核心在於通過明確定義狀態、事件和轉換規則,將業務邏輯模塊化。本文將探討在 Go 中如何使用有限狀態機。有限狀態機在介紹有限狀態機之前,我們可以先來看一個示例程序: https://github.com/jianghushinian/blog-go-example/blob/main/fsm/main.gopackage mainimp ⌘ Read more
API 設計的 “Go 境界”:Go 團隊設計 MCP SDK 過程中的取捨與思考
大家好,我是 Tony Bai。作爲開發者,我們每天都在與 API 打交道——調用它們,設計它們,有時也會爲糟糕的 API 設計而頭痛不已。一個優秀的 API,如同一位技藝精湛的嚮導,能清晰、高效地引領我們通往復雜功能的彼岸;而一個蹩腳的 API,則可能像一座佈滿陷阱的迷宮,讓我們步履維艱。那麼,在 Go 語言的世界裏,一個 “好” 的 API 應該是什麼樣子的?它應該如何體現 Go 語言簡潔、高 ⌘ Read more
自制 ResponseWriter:Go 安全 HTTP
Go 的 http.ResponseWriter 會直接向套接字(socket)寫入數據,這可能會導致一些隱蔽的 bug,例如忘記設置狀態碼,或是在爲時已晚的時候意外修改了響應頭(header)。本文將展示如何通過包裝 ResponseWriter 來強制執行自定義規則,例如要求 WriteHeader() 以及在出錯後阻止寫入操作,從而讓你的處理器(handler)更安全、也更易於梳理邏輯。我用 ⌘ Read more
Go 語言實現優雅關機和重啓的示例很詳細
在生產環境中,服務的更新和維護是不可避免的。粗暴地終止服務會導致:正在處理的請求被中斷 數據庫事務未完成 緩存數據丟失 客戶端連接異常 本文將深入探討如何使用 Go 語言實現:優雅關機 :等待現有請求完成後再關閉服務 優雅重啓 :無縫切換新舊進程,實現零停機更新 優雅關機實現核心機制完整實現代碼package mainimport(” ⌘ Read more
Gin 服務性能提升的最佳實踐
Gin 框架是在 Go 中構建網絡服務的首選。隨着應用程序複雜性和流量的增加,性能成爲不能忽視的因素。本文將介紹一系列使用 Gin 構建服務的有效技巧,涵蓋從路由優化到內存重用、請求和響應優化、異步處理以及性能分析,幫助你創建更穩定高效的 Web 服務。路由註冊優化:避免循環引用————-Gin 的路由器使用基於樹的高效路由實現,可以快速匹配請求路徑。但是,如果路由註冊不當,例如嵌 ⌘ Read more
代碼覆蓋率新玩法:Russ Cox 教你用差異化分析加速 Go 調試
大家好,我是 Tony Bai。調試,尤其是調試並非自己編寫的代碼,往往是軟件開發中最耗時的環節之一。面對一個失敗的測試用例和龐大的代碼庫,如何快速有效地縮小問題範圍?Go 團隊的前技術負責人 Russ Cox 近期分享了一個雖然古老但極其有效的調試技術——差異化覆蓋率 (Differential Coverage)。該技術通過比較成功和失敗測試用例的代碼覆蓋率,巧妙地 “高亮” 出最可能包含 B ⌘ Read more
Golang 業務邏輯 WASM 化實踐指南
爲什麼選擇 WASM 邊緣計算?在物聯網和 5G 加速普及的當下,邊緣計算對低延遲和離線能力的需求暴增。傳統容器方案(如 Docker)在邊緣設備上面臨三大痛點:資源消耗大:x86 容器鏡像通常超過 100MB,ARM 設備運行效率低下 冷啓動慢:Node.js/Python 等解釋型語言啓動時間超過 500ms 安全風險:系統級隔離存在逃逸風險 WebAssembly(WASM ⌘ Read more
Go Wails 桌面開發之 Go 與 Preact 如何協作通信?
上一篇文章裏我們簡單的瞭解了 Wails,在本篇文章裏將帶你從 0 開始,藉助 Wails 框架構建一個前後端分離的 Todo 應用,前端用 Preact,後端使用 Go,並講解它們之間的通信機制與數據傳遞方式。閒話少說,開始今天的內容,let’s go!!!Wails 框架如何工作?—————–在 Wails 中,前端通過 WebView 渲染頁面,後端通過 Go 提供邏輯 ⌘ Read more
Go 語言中字符串四種拼接方式的性能對比,哪個更勝一籌?
在 Go 語言開發中,字符串拼接是最常見的操作之一。不同的拼接方式在性能上可能有數量級的差異,特別是在高頻調用或大數據量處理的場景下。本文將使用標準基準測試,全面對比四種主流字符串拼接方式的性能表現。測試環境與方法測試環境Go 版本:1.20+ 操作系統:macOS/Windows/Linux CPU:8 核 測試方法我們創建了一個完整的基準測試文件echobenchtest.g ⌘ Read more
Go 指針還能這麼玩?結構體方法調用竟然不用解引用!
Go 語言中的指針詳解包含字段與方法的簡化寫法————在 Go 語言中,指針是高效操作數據、避免大對象拷貝的重要工具。本文將詳細講解 Go 中指針相關的幾個關鍵概念:&:取地址 T:聲明指針類型 p:解引用指針 結構體指針可以使用 ptr.Field 和 ptr.Method() 的簡化寫法 是否支持多級指針如 *T 一、基本操作符解釋——– ⌘ Read more
從 Go 路由選擇看 “標準庫優先”:何時堅守?何時拓展?
大家好,我是 Tony Bai。最近,知名 Go 博主 Alex Edwards 更新了他那篇廣受歡迎的文章——“Which Go router should I use?1]”,特別提到了 [Go 1.22 版本對標準庫 http.ServeMux 的顯著增強。這篇文章再次引發了我們對 Go Web 開發中一個經典問題的思考:在選擇路由庫時,我們應該堅守標準庫,還是擁抱功能更豐富的第三方庫?這個 ⌘ Read more
Go 語言 從設計到優化全流程 構建高併發權重抽獎系統
在現代互聯網應用中,抽獎系統被廣泛用於營銷活動、用戶激勵等場景。一個好的抽獎系統需要滿足:公平性:確保概率分佈準確高性能:支持高併發抽獎請求安全性:防止作弊和重複中獎可擴展:支持多種抽獎活動配置本文將基於 Go 語言實現一個完整的權重抽獎系統,涵蓋核心算法、併發控制、安全防護等關鍵設計。一、系統架構設計1. 整體架構圖2. 核心組件說明二、核心算法實現1. 權重區間算法type Prize str ⌘ Read more
在 Go 中應該何時使用 panic?
如果你使用 Go 有一段時間了,可能聽說過 Go 的諺語 “don’t panic”。這句話的核心意思是:“優雅地處理錯誤,或者將錯誤返回給調用方去處理,而不是直接傳遞給內置的 panic() 函數。”儘管 “不要 panic” 是一個值得遵循的優秀準則,但有時候它被理解成“你絕對不能、絕不應該調用 panic()”。我並不這麼認爲,在某些少數情況下, panic() 是更合適的行爲。「爲什麼 p ⌘ Read more
golang 每日一庫之依賴注入庫 samber-do
do 是 Go 語言中一個輕量級的依賴注入(Dependency Injection, DI)容器,由 samber 開發。它基於 Go 1.18+ 泛型實現,爲 Go 提供了一個類型安全的 DI 方案。do 庫的設計理念是簡化服務組件之間的依賴管理,取代手工創建依賴關係的繁瑣工作,使不同組件之間鬆散耦合、更易測試與維護。與反射型 DI 框架不同,do 在註冊和解析依賴時不使用反射,因此性能開銷很 ⌘ Read more
Go 1-24 震撼發佈!這些新特性你必須知道!
一、工具鏈重大升級 🛠️————-更智能的模塊校驗機制 新版本引入了 verify 命令go mod verify -json通過結構化輸出模塊校驗結果,完美解決了開發者在持續集成(CI)流程中解析校驗結果的痛點。舊版本只能獲得簡單提示$ go mod verifyall modules verified新版本結構化輸出$ go mod verify -json{ ”Pat ⌘ Read more
精通 SOLID 原則在 Go 中的應用:編寫乾淨且可維護的代碼
在軟件開發中,構建可維護、可擴展和健壯的代碼是最終目標。SOLID 原則由 Robert C. Martin(也稱爲 Uncle Bob)提出,爲實現這一目標提供了基礎。這些原則如何應用於 Go 語言呢?Go 以其簡潔和務實著稱,讓我們來探討 Go 的慣用風格如何與 SOLID 原則對齊,從而生成乾淨、高效的軟件。單一職責原則(SRP)———–“一個類應該只有一個改變的原因。”在 G ⌘ Read more
如何在 Go 中設計並公開接口
Go 語言中的接口(interface)是其最具特色的功能之一。與許多其他語言不同,在 Go 中,類型不需要顯式聲明實現某個接口。只要一個類型定義了接口所需的方法,它就自動實現了該接口。然而,編寫良好的接口並不容易。不恰當地暴露寬泛或不必要的接口,容易污染包的 API。本文將解釋現有接口設計準則背後的邏輯,並結合標準庫中的示例進行說明。「接口越大,抽象越弱」大型接口往往難以找到多個實現類型。因此, ⌘ Read more
Go 開發者必知:五大緩存策略詳解與選型指南
大家好,我是 Tony Bai。世界讀書日贈書活動火熱進行中,快快參與,也許你就是那個幸運兒。在構建高性能、高可用的後端服務時,緩存幾乎是繞不開的話題。無論是爲了加速數據訪問,還是爲了減輕數據庫等主數據源的壓力,緩存都扮演着至關重要的角色。對於我們 Go 開發者來說,選擇並正確地實施緩存策略,是提升應用性能的關鍵技能之一。目前業界主流的緩存策略有多種,每種都有其獨特的適用場景和優缺點。今天,我們就 ⌘ Read more
『八股文™』詳解 Go 中的深拷貝與淺拷貝
大家好,我是 moooofly。今天我們來聊一聊:Go 語言中關於深拷貝和淺拷貝的問題。0x01 基礎概念在 Go 語言中,針對如下結構體,如何對其進行淺拷貝和深拷貝?代碼示例如下上述問題的核心在於:需要理解 Go 語言中的值類型和引用類型 需要知道 Go 語言中哪些類型可以直接通過賦值完成安全拷貝,哪些類型需要做深拷貝處理 需要知道如何手動處理嵌套結構中的指針類型,以及需要通過 ⌘ Read more
使用 Go 構建一個高性能鍵值存儲
我們知道 Redis 是一個高性能的鍵值存儲,如果我們要實現一個高性能的鍵值存儲,嵌入在我們的 Go 應用程序中,那麼這個庫可能會幫助到你。Bolt 是一個由 Go 語言編寫的嵌入式鍵值對數據庫引擎,其核心設計目標是提供簡單、快速且可靠的數據存儲能力。目前,作爲 BoltDB 的優化分支(etcd-io/bbolt), 它尤其適用於需要事務支持和高併發讀寫的應用場景,如配置文件存儲、緩存系統和小型 ⌘ 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
使用 Go 進行 HTTP 流量重放測試
在 Web 安全測試、API 調試、流量回歸測試中,HTTP 流量重放(HTTP Traffic Replay)是一項重要的技術。它可以幫助我們復現問題、測試系統兼容性、進行安全研究等。在這篇文章中,我們將簡單探討 HTTP 流量重放的原理,並通過 Go 語言實現不同的流量重放方案,同時介紹常見的開源工具。(身爲一個在小公司裏的網安牛馬,總得幹些雜活🐂🐎)HTTP 流量重放的原理HTTP 流量重放 ⌘ Read more
Go:終於有了處理未定義字段的實用方案
衆所周知,Go 裏沒有 undefined,只有各類型的零值。多年來,Go 開發者一直依賴 JSON 結構標籤 omitempty 來解決 “字段可能缺失” 這一需求。然而omitempty 並不能覆蓋所有場景,而且常常讓人抓狂——到底什麼算 “空”?定義本就含糊不清。在 編碼(marshal) 時:切片和 map 只有在爲 nil 或長度爲 0 時纔算空。 指針只有 nil 時爲空。 ⌘ Read more
用 Go 語言開發一個石頭剪刀布遊戲,很簡單
本文將通過 Go 語言實現一個玩家與電腦對戰的石頭剪刀布遊戲,並重點講解如何通過 Go 的 crypto/rand 包生成安全的隨機數,確保遊戲的公平性。一、遊戲模型設計在編寫代碼之前,我們首先要設計遊戲的基本模型,包括參與者、動作和遊戲狀態。1. 用戶與動作遊戲的參與者有兩個:玩家和電腦。每個參與者可以做出三種選擇:石頭、剪刀或布。我們通過 Go 的枚舉類型來表示這些選擇。// 用戶類型type ⌘ Read more
Weightedrand:Go 權重隨機選擇
weightedrand (github.com/mroth/weightedrand) 是一個 Go 語言實現的權重隨機選擇庫,可以從一個元素列表中以不同的概率選擇一個元素,也就是所謂的加權隨機選擇(weighted random selection)。你可以爲每個元素設置 “權重”(可以理解爲概率的相對值),然後根據這些權重進行隨機選擇。安裝go get github.com/mroth/we ⌘ Read more
靜態程序分析入門之 Go 實踐筆記
編譯與靜態分析的關係在 Introduction to the Go compiler[5] 也能看到相似的流程,靜態分析主要發生在 IR 層,生成機器碼後端部分 (back-end) 那就是編譯器所考慮的了。• 詞法分析器(Scanner)結合正則表達式 (Regular Expression) ,通過詞法分析(Lexical Analysis)將源碼翻譯爲 token。 • 語法分析器( ⌘ Read more
Go 利用 github-com-miekg-dns 進行安全分析與防護
在網絡安全領域,DNS(域名系統)是攻擊者和防禦者都非常關注的目標。攻擊者可以利用 DNS 進行隧道通信、數據滲透、欺騙攻擊,而安全專家則需要檢測和防禦這些威脅。本文將簡單地介紹 github.com/miekg/dns 庫,並通過代碼演示如何利用它進行 DNS 監控、流量分析和攻擊檢測。miekg/dns 介紹miekg/dns 是 Go 語言中比較流行的 DNS 解析庫之一,它支持:自定義 D ⌘ Read more
ChanX:Go 構建無限緩衝通道
chanx (github.com/smallnest/chanx) 一個用環形緩衝區(ringbuffer)實現的無界通道(unbounded channel)的 Go 語言庫。它非常適合在需要異步處理、生產者快於消費者、或對標準通道容量受限(如 make(chan T, N))感到不滿足的場景中使用。爲什麼需要 Unbounded Channel?Go 原生的 chan 是有限容量的:默認是阻 ⌘ Read more
基於 Golang 和 WebSocket 實現屏幕共享方案
在遠程協作、在線教學、監控等場景中(當然啦!還有其他的用途,這裏就不說了,懂得都懂),屏幕共享是一項非常重要的技術。本文將介紹如何使用 Golang 開發一個基於 WebSocket 的屏幕共享系統,實現遠程查看電腦屏幕的功能。技術原理整個屏幕共享的流程如下:定時截圖:使用kbinani/screenshot 進行屏幕捕獲,每隔 100ms 採集一次屏幕。 圖片壓縮:爲了減少數據傳輸量,將截 ⌘ Read more
Go 1-24 讓項目工具管理更優雅的 tool 指令
工具管理的歷史難題———在 Go 1.24 之前,管理項目依賴的工具(如 linters、代碼生成器等)是一個棘手的問題。雖然有 go.mod 來管理代碼依賴,但工具依賴卻沒有一個官方的解決方案。社區曾流行的做法是創建一個名爲 tools.go 的文件,通過一種 “技巧” 來管理這些工具依賴://go:build toolspackage toolsimport ( ”gol ⌘ Read more
Go 定時任務調度從入門到實戰
在開發後臺服務時,我們經常需要處理定時任務。例如每天凌晨備份數據、每 5 分鐘檢查服務狀態、每小時發送統計報表…這些場景都需要可靠的定時任務調度機制。Go 語言就提供了強大的定時任務處理能力,既有標準庫的基礎功能,也有企業級的第三方解決方案。一、標準庫基礎用法———1. 簡單的單次延遲任務timer := time.NewTimer(3 time.Second) // 3秒後 ⌘ Read more
Badu-bus:Go 輕量級泛型發佈 - 訂閱事件總線
badu/bus (github.com/badu/bus) 是一個 Go 語言基於泛型實現的輕量級發佈 - 訂閱(Pub/Sub)事件總線庫。它允許不同的組件通過事件機制進行解耦通信,而不需要直接調用彼此的函數。它解決了什麼問題?組件解耦:發佈者和訂閱者彼此無感知,更靈活、可擴展,便於測試。 異步消息:消息可以異步發送和接收,提高系統性能和響應速度。 模塊化:有利於將系統拆分爲更小、 ⌘ Read more
使用 Go 實現零停機處理數百萬個 WebSocket 連接
引言 —想象一下這樣的場景:你剛剛上線了一款實時聊天應用,用戶數量快速攀升至數十萬。然而,每次服務更新都會導致所有用戶連接斷開,他們需要手動刷新頁面才能重新連接。用戶反饋很差,因爲重要的消息會在服務更新期間丟失。這是一個經典的問題 —— 如何在不中斷服務的情況下更新和擴展 WebSocket 應用?WebSocket 技術爲現代 Web 應用提供了雙向實時通信能力,廣泛應用於聊天應用、遊戲、 ⌘ Read more
用 Go 語言打造高併發 MCP 服務器:理論、實戰與 AI 應用全景探索
在這個 AI 與大數據時代,構建一個高性能、可擴展的 MCP(Modular/Model Context Protocol)服務器已成爲打通應用與 AI 模型之間數據孤島的重要橋樑。本文將帶你深入瞭解 MCP 協議的設計理念、使用 Go 語言實現 MCP 服務器的詳細流程,以及 MCP 如何爲 AI 應用提供類似 USB-C 接口般的統一連接能力。 “MCP 提供統一的數據交換框架,幫助企業實 ⌘ Read more
如何用 go 搭建 MCP 服務
什麼是 MCP?———–MCP 是 “模型上下文協議(Model Context Protocol)” 的簡稱,用一句簡單通俗易懂的話描述:是一種讓 AI 模型能夠無縫連接到外部工具和數據源的標準化方式。想象它就像 AI 的“萬能接口”,能讓 AI 像用 USB 線連接設備一樣,輕鬆調用其他程序或服務。官方 MCP 架構圖————-MCP Hosts: 是指 LLM ⌘ Read more
在 Go 中使用 Redis 管道提升性能
Redis 管道簡介 ———–Redis 的管道是一種優化技術,允許客戶端一次性發送多個命令到服務器,而無需逐一等待響應。服務器執行完所有命令後,再一次性返回所有結果。簡單來說,就是從 “一個一個送信” 變成“打包快遞”,大大減少了網絡通信的次數。來看看直觀的對比:無管道:發送命令 1,等待響應;發送命令 2,等待響應…… 每次都跑一個來回。 有管道:把命令 1、2、3 打包 ⌘ Read more