# I am the Watcher. I am your guide through this vast new twtiverse.
# 
# Usage:
#     https://watcher.sour.is/api/plain/users              View list of users and latest twt date.
#     https://watcher.sour.is/api/plain/twt                View all twts.
#     https://watcher.sour.is/api/plain/mentions?uri=:uri  View all mentions for uri.
#     https://watcher.sour.is/api/plain/conv/:hash         View all twts for a conversation subject.
# 
# Options:
#     uri     Filter to show a specific users twts.
#     offset  Start index for quey.
#     limit   Count of items to return (going back in time).
# 
# twt range = 1 2879
# self = https://watcher.sour.is?uri=https://feeds.twtxt.net/yue-fang-readfog-go/twtxt.txt&offset=2879
# prev = https://watcher.sour.is?uri=https://feeds.twtxt.net/yue-fang-readfog-go/twtxt.txt&offset=2779
搞懂常見 Go ORM 系列 - Ent 框架詳解**
在 Go ORM 開篇中我們將 Go ORM 框架分成了三類🌲 反射型主要通過反射機制將結構體映射到數據庫表上,代表作爲 go-gorm/gorm🌲 代碼生成型通過代碼生成工具預先生成數據模型及查詢構建器,代表作有 ent/ent 和日益流行的 go-gorm/gen🌲 SQL 增強型基於原生 SQL 庫進行封裝和擴展,既保留 SQL 的靈活性,又提供了一系列便捷函數,代表作爲 jmoiron/s ⌘ Read more
Go 語言錯誤處理:Panic 與 Error 的抉擇**
在 Go 語言的開發實踐中,錯誤處理機制是構建健壯應用程序的核心要素。與其他語言不同,Go 通過顯式的錯誤返回和獨特的 panic/recover 機制形成了獨特的錯誤處理哲學。本文將深入探討 panic 與 error 的本質區別,並通過實際場景分析幫助開發者做出正確的技術選擇。 錯誤處理機制的核心差異-----------Error 的顯式傳遞特性Go 語言將 error 定義爲內置接口類型, ⌘ Read more
Go 1-25:工具鏈優化與運行時改進**
Go 語言自誕生以來,始終保持着穩定的迭代節奏。2025 年 8 月即將發佈的 Go 1.25 版本在工具鏈、運行時、編譯器及標準庫等方面都帶來了值得關注的改進。本文將從實際開發角度出發,詳細解析這些變化的技術細節及其對開發者產生的實際影響。工具鏈增強-----構建系統優化go build命令的-asan選項在 1.25 版本中默認啓用了內存泄漏檢測機制。該功能會在程序退出時自動檢查未釋放的 C ⌘ Read more
Go 語言中 Redis 管道的性能潛力**
在現代分佈式系統架構中,Redis 憑藉其卓越的性能表現已成爲不可或缺的緩存和數據存儲組件。但在高併發場景下,如何突破網絡 I/O 瓶頸成爲開發者面臨的重要挑戰。本文將深入探討 Go 語言中 Redis 管道的實現原理,並通過詳實的代碼示例展示其性能優化之道。Redis 交互模式的演進之路---------------傳統 Redis 客戶端的工作模式遵循 "請求 - 響應" 的同步範式。當執行S ⌘ Read more
golang 每日一庫之 base64Captcha
今天要介紹的庫 mojocn/base64Captcha 是一個用於 Go 語言的高效驗證碼生成庫,支持圖片、音頻等多種驗證碼格式,並且可以通過 base64 編碼輸出,方便前端直接使用。該庫廣泛用於 Web 應用、REST API 以及需要身份驗證的系統中,以增強安全性。主要功能--------支持多種驗證碼類型數字驗證碼 (DriverDigit):僅包含數字,適用於一般驗證碼場 ⌘ Read more
golang 每日一庫之 go-pinyin
go-pinyin 漢字轉拼音庫今天要介紹的庫是一個拼音庫,這個庫相對比較冷門,但是開發過母嬰類 app 的道友可能知道。go-pinyin 是一個用於將漢字轉換爲拼音的 Golang 庫,提供多種模式,支持帶音調、無音調、首字母提取等功能。該庫適用於拼音搜索、漢字排序、文本轉換等場景。安裝------使用 go get 下載安裝:go get -u github.com/mozillazg/go ⌘ Read more
使用 Go 構建 MCP Server
一、MCP 介紹 ---------1. 基本介紹 MCP(Model Context Protocol,模型上下文協議)是由 Anthropic 公司(Claude 大模型的創造者)於 2024 年 11 月推出的一種開放標準協議,旨在統一大型語言模型(LLM)與外部數據源和工具之間的通信方式。MCP 的核心目標是解決當前 AI 應用開發中的數據孤島和碎片化集成問題。2. 協議特點 MCP 可以 ⌘ Read more
WebSockets 在 Go 中的應用:從基礎到實踐**
WebSockets 提供了一種強大的雙向通信方式,使客戶端(如 Web 瀏覽器)與服務器能夠實時交換數據。與傳統的 HTTP 請求 - 響應模型不同,WebSockets 允許全雙工通信,即客戶端和服務器可以隨時獨立發送和接收消息。因此,WebSockets 非常適合用於聊天應用、實時數據推送和交互式遊戲等場景。在本篇文章中,我們將使用 Gin 框架和 gorilla/websocket 庫,搭 ⌘ Read more
構建可維護的 Go 項目:整潔架構實踐指南**
在快速迭代的軟件開發過程中,如何構建長期可維護的代碼庫始終是開發者面臨的重大挑戰。本文將以 Go 語言爲例,深入探討整潔架構(Clean Architecture)的核心思想及其在工程實踐中的具體實現方式。通過系統性分層、接口隔離和依賴管理,我們將展示如何打造具備高可測試性、低耦合度的現代化 Go 項目。 整潔架構的核心設計原則-----------整潔架構由 Robert C. Martin 提 ⌘ Read more
爲什麼 Go 語言的錯誤處理其實設計得很好**
Go 的臭名昭著的錯誤處理 \[1\] 引起了編程語言圈外人士的廣泛關注,常常被認爲是該語言最具爭議的設計決策之一。如果你瀏覽 Github 上任何一個用 Go 編寫的項目,幾乎可以保證你會看到以下代碼行比代碼庫中的其他部分出現得更頻繁:if err != nil {    return err}對於剛接觸這門語言的人來說,這可能顯得多餘且不必要,但 Go 將錯誤視爲一等公民(值)的原因,深深植根於編 ⌘ 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
從 Shell 到 Go:腳本編寫的優雅進化**
你有沒有想過,寫腳本這件事,可能不再需要依賴 Unix Shell 了?別誤會,Shell 確實是個 “魔法工具”,能用一行命令完成許多複雜任務。但如果你是 Go 語言的愛好者,或者正在尋找一種更現代化、更高效的腳本編寫方式,那麼今天這篇文章絕對會讓你眼前一亮!我們將深入探討如何用 Go 語言結合script包,輕鬆實現原本需要 Shell 才能完成的任務。不僅代碼更優雅,還能跨平臺運行,甚至 ⌘ Read more
golang 每日一庫之 gopsutil
shirou/gopsutil 是一個用 Go 語言實現的跨平臺系統信息採集庫,其設計靈感來源於 Python 的 psutil。它爲開發者提供了一套統一、簡潔的 API,用於獲取底層操作系統的各項指標數據,如 CPU、內存、磁盤、網絡、主機信息以及進程狀態等。下面我們將從多個方面詳細介紹這個庫的功能、設計特點、使用示例以及應用場景。庫簡介------跨平臺支持 gopsutil ⌘ Read more
使用 Golang-OpenCV 獲取攝像頭視頻流: 從原理到實踐**
在現代計算機視覺應用中,實時視頻處理是一個重要的功能,例如監控系統、人臉識別、手勢檢測等。而 Go 語言結合 OpenCV 可以高效地實現攝像頭數據的採集和處理。在本篇文章將會簡單的講解,OpenCV 處理視頻流的基本步驟,原理和如何使用 gocv 這個庫來讀取攝像頭畫面。安裝 OpenCV因爲我用的是 mac 電腦所以,我使用 homebrew 進行 opencv 的安裝,其他平臺例如 arch ⌘ Read more
Golang 擴展 osquery,讓系統查詢更強大!**
在深圳有很多老闆都很奇葩,比如我的前老闆,需求是半夜給的,效果是要早上看到的,我要感謝我的的前老闆,讓我接觸到了聞所未聞的新奇技術。今天要分享的內容是 osquery 這個東西,不知道各位萬能的網友們知不知道。osquery 是一個強大的開源工具,它能讓我們像查詢數據庫一樣獲取操作系統信息。而 osquery-go 則是官方提供的 Golang SDK,可以讓我們擴展 osquery,添加自定義查 ⌘ Read more
使用 Go 實現 License 認證**
在軟件授權管理中,License 機制可以有效防止未授權使用,確保軟件的合法性。本篇文章將講解如何使用 Go 生成機器碼、創建 License、驗證 License 及防止時間篡改,並提供完整可運行代碼示例,以讓您理解其中的邏輯。License 機制概述在軟件授權體系中,License(許可證)是用於驗證軟件的合法使用權限的一種機制。常見 License 設計包含以下關鍵要素:機器碼:用於唯一標識 ⌘ Read more
chromem-go:Go 語言 RAG 應用的高效輕量級向量數據庫**
前言在開發 RAG(Retrieval-Augmented Generation)應用時,起初你可能更傾向於選擇一款輕量級的向量數據庫,而非複雜的大型數據庫。例如,在關係型數據庫的選擇上,許多人會更願意使用 SQLite 而不是 PostgreSQL 或 MySQL,以減少額外的配置和維護成本。在 Go 語言中,chromem-go 提供了一種簡潔高效的解決方案——它是一款可嵌入到 Go 程序中的 ⌘ Read more
golang 每日一庫之 volatiletech-authboss
Authboss 是一個強大且可擴展的 Go 語言認證(authentication)和授權(authorization)框架,適用於 Web 應用程序。它提供了一套完整的用戶身份驗證方案,包括用戶註冊、登錄、註銷、賬號恢復、密碼重置、OAuth2、雙因素認證(2FA)等功能,使開發者能夠快速構建安全的身份認證系統。核心特性--------模塊化設計 :Authboss 由多個獨立的 ⌘ Read more
如何使用 go:linkname 指令訪問 Go 包中的私有函數**
在 Go 語言的包設計中,函數和變量通過首字母大小寫來嚴格區分導出(exported)與未導出(unexported)的可見性規則。這種機制是 Go 模塊化設計的基石,但同時也爲底層系統級開發帶來了限制。//go:linkname 指令正是 Go 爲突破這一限制預留的「後門」,它通過編譯器的符號重定向能力,允許開發者直接鏈接任意包的未導出符號——無論是標準庫的私有函數,還是第三方包的隱藏變量。本文 ⌘ Read more
Go 語言 TCP 服務構建:原理到工程實踐**
在分佈式系統架構中,傳輸層協議扮演着關鍵角色。作爲可靠傳輸的代表,TCP 協議通過三次握手建立連接、滑動窗口流量控制、序列號確認機制等技術,爲上層應用提供了有序且可靠的數據傳輸通道。這種面向連接的協議特性,使其成爲實時通信、文件傳輸、遠程控制等場景的首選方案。Go 語言自誕生之初就將網絡編程能力作爲核心設計目標。其標準庫中完善的 net 包提供了跨平臺的網絡 I/O 接口,結合輕量級線程 goro ⌘ Read more
golang 每日一庫之 fatih-color
fatih/color 是一個流行的 Go 語言庫,用於在終端中輸出彩色文本和樣式化的內容。由開發者 Fatih Arslan 創建,它簡化了 ANSI 轉義碼的使用,使開發者能夠輕鬆爲 CLI 工具、日誌系統等添加顏色和樣式。特點豐富的顏色和樣式支持 顏色 :支持 16 種基礎前景色(如紅色、綠色)和背景色。 樣式 :支持加粗(bold)、斜體(itali ⌘ Read more
用 Go 構建跨平臺桌面應用:Wails 框架的深度實踐指南**
在桌面應用開發領域,Electron 等基於 Web 技術的方案長期佔據主導地位,但其資源消耗問題始終是開發者心中的痛點。Go 語言的高效性和簡潔性爲這個問題提供了新的解題思路,而 Wails 框架正是這種思路的具象化體現。Wails 框架的核心價值在於將 Go 的後端能力與現代化前端技術無縫結合。通過內置的 Vite 支持,開發者可以自由選擇 React、Vue 或 Svelte 等前端框架,同 ⌘ Read more
Go 語言中的 LangGraph:基於 LangGraphgo 的 AI 任務編排**
在 AI 任務編排領域,LangChain 提供了 LangGraph,幫助開發者搭建複雜、多步驟、有狀態的 AI 工作流。但這個庫主要基於 Python,而在 Go 語言生態中,如何實現類似的 AI 任務編排呢?今天,我們來介紹 langgraphgo,一個爲 Golang 量身定製的 AI 任務流管理框架。通 langgraphgo,你可以高效地構建 AI 代碼審計、對話系統、多智能體協作等應 ⌘ Read more
golang 每日一庫之 jinzhu-now
jinzhu/now 是一個用於增強 Go 語言時間處理的第三方庫,它基於標準庫 time 進行了擴展,提供了更便捷的時間操作功能,適用於需要頻繁處理時間區間、時區轉換或複雜時間解析的場景。以下是該庫的核心功能和用法詳解:一、核心功能時間區間的便捷計算now 庫提供了快速獲取時間區間(如某分鐘的開始 / 結束、某周的開始 / 結束等)的方法,無需手動計算。例如: import ⌘ Read more
gogen:一鍵生成 Go 項目,開發者的效率利器**
在 Go 開發中,手動搭建項目結構是不是讓你覺得效率低下?有沒有想過一個工具能一鍵搞定模板生成,像 Rust 的 cargo generate 那樣簡單?我開發的 gogen 就是爲此而生——輕量、靈活,專爲 Go 開發者打造。幾秒鐘內,你就能擁有一個定製化的項目骨架。接下來,讓我帶你看看它有多實用!gogen 是一個 Go 項目生成工具,靈感源自 Rust 的 cargo generate,旨在 ⌘ Read more
golang 每日一庫之 bluele-gcache
bluele/gcache 是一個 高性能、功能豐富的 Go 語言緩存庫,支持多種緩存策略,如 LRU(最近最少使用)、LFU(最少使用頻率)、ARC(自適應緩存替換)等,可以靈活選擇適合的緩存模式。1. 安裝---------使用 go get 下載安裝:go get github.com/bluele/gcache然後在代碼中導入:import "github.com/bluele/gcach ⌘ Read more
如何基於 Go 語言設計一個簡潔優雅的分佈式任務系統**
在當今雲計算與微服務盛行的時代,分佈式任務系統已成爲支撐大規模業務的核心基礎設施。今天就來爲大家分享下如何基於 Go 語言從零設計和實現一個架構簡潔且擴展性強的分佈式任務系統。前置概念本文會設計並實現一個分佈式任務系統,這裏我們要先明確兩個概念。• 分佈式:在我們將要實現的分佈式任務系統中,分佈式是指我們的服務可以部署多個副本,這樣才能確保服務更加穩定。 • 任務:這裏的任務是指異步任務,可 ⌘ Read more
【GoAnalysis】大更新,Go 項目源碼褲衩子被脫光了**
前提上週,我發佈了 goanalysis 工具的首個版本,並得到了廣大用戶的積極反饋與支持。隨着關注度的增加,許多用戶表達了對如何有效利用該工具的興趣和疑問。經過深入考量後,我決定對 goanalysis 進行重大升級以更好地滿足用戶需求。本文旨在詳細介紹最新版 goanalysis 的功能特性及其使用方法,並引導大家訪問體驗網站。主要功能包括:運行時性能分析:提供應用程序在實際執行過程中性能指標 ⌘ Read more
go-attention:純 Go 語言實現的注意力機制和 Transformer
go-attention\[1\] 是由 takara.ai\[2\] 的前沿研究團隊開發的,是第一個純 Go 語言實現的注意力機制和 Transformer 層的庫。它專爲高性能和易用性而設計,目前已開源且經獲得了 291 star。主要特點----純 Go 實現:無外部依賴,適合邊緣計算和需要依賴管理的場景 完整的注意力機制:包括基本的點積注意力和多頭注意力 完整的 Transformer ⌘ Read more
Golang 網絡編程:像 C 語言一樣操作 Socket
在 C 語言中,進行網絡編程通常使 socket()、bind()、listen()、accept() 等系統調用,而在 Golang 中,我們既可以使用 net 庫提供的高級封裝,也可以直接使用 syscall 庫進行底層操作。本篇文章將簡單的介紹 Golang 如何像 C 語言一樣進行網絡編程。使用 net 庫進行 TCP 編程(推薦方式)Golang 的 net 包對 socket 進行了封 ⌘ Read more
Go-redis:執行 Lua 腳本**
go-redis (github.com/redis/go-redis) 支持 Lua 腳本 redis.Script,本文在這裏簡單展示其在秒殺場景中使用的代碼片段。秒殺場景在秒殺場景中,一個商品的庫存對應了兩個信息,分別是總庫存量和已秒殺量。可以使用一個 Hash 類型的鍵值對來保存庫存的這兩個信息,如下所示:key: productid value: {total: N, ordered: ⌘ Read more
golang 每日一庫之 gods
在 Go 語言的生態中,數據結構的選擇和實現往往直接影響程序的性能和代碼的可維護性。今天,我們就來聊聊一個備受開發者喜愛的開源項目 gods,它爲我們提供了豐富且易用的數據結構實現,極大地簡化了開發過程中 “造輪子” 的煩惱。項目背景-------gods 是由 Emir Pasic 開發並維護的一個開源庫,旨在爲 Go 語言提供各種常用數據結構和算法的實現。項目採用 MIT 許可證,鼓勵社區貢獻 ⌘ Read more
Golang 實現 IP 全球定位**
在 Golang 開發中,如何快速獲取 IP 地址的地理位置?無論是安全審計、日誌分析,訪問控制,還是資產測繪,網絡空間搜索等等都可能需要 IP 定位。本篇文章將介紹常見幾種 Golang IP 定位方案,幫助你選擇最合適的方法。IP 全球定位系統IP 定位系統是利用多種數據庫,如全球城市數據庫、多語言支持庫、IP 地址數據庫以及地圖服務等資源來精準確定用戶位置。藉助於 IP 地理定位 API,我 ⌘ Read more
yaegi:讓你的 Go 代碼擁有動態腳本能力**
在 Go 語言的世界裏,靜態編譯是其一大特色,能夠保證性能和安全性。然而,有些場景下,我們希望像 Python 或 JavaScript 一樣,支持運行時動態執行代碼,比如插件化架構、規則引擎、腳本解釋器等。今天,我們來介紹一個強大的 Go 解釋器庫——yaegi,它能讓 Go 代碼在運行時執行動態腳本。yaegi 簡介yaegi 是一個用 Go 語言編寫的 Go 解釋器。它可以在運行時解析和執行 ⌘ Read more
LangChainGo 中的提示詞工程(Prompt Engineering)**
在使用 LangchainGo(簡稱 langchaingo)構建智能應用時,提示詞工程(Prompt Engineering) 是一個關鍵環節。它可以幫助我們更精準地引導 LLM(大語言模型)生成符合預期的內容。本文將介紹在 langchaingo 中如何使用提示詞工程。什麼是提示詞工程?提示詞工程是人與機器進行溝通的橋樑,更是用戶引導 AI 精準執行任務的關鍵。提示詞基礎策略明確目標: 用戶需 ⌘ Read more
Go Context 實踐指南:以生產環境問題爲例**
背景    Go 語言中的 context(上下文) 對於 Go 程序員來說應該是司空見慣, 很多都會不假思索的將 context 類型入參作爲函數的第一個參數.     最近因爲在生產環境處理過一個和 context 有關的問題, 因此希望可以藉助這個實際問題說說 context 使用上的注意事項. 類似 “context 應該使用參數傳遞不能作爲 struct 成員” 的八股知識不在本文討論範 ⌘ Read more
golang 每日一庫之 go-flags
go-flags 是一個用於處理命令行參數和標誌的 Go 庫,它提供了一種簡潔而靈活的方式來定義和解析命令行標誌(flags)和參數。這個庫對於需要處理命令行輸入的 Go 應用程序非常有用,特別是在構建 CLI(命令行工具)時。1. 安裝 go-flags首先,你需要安裝 go-flags 庫。在命令行中運行以下命令:go get github.com/jessevdk/go-flags這個命令會 ⌘ Read more
在 Go 中如何使用分佈式鎖解決併發問題?**
在分佈式系統中,協調多個服務實例之間的共享資源訪問是一個經典的挑戰。傳統的單機鎖(如 sync.Mutex)無法實現跨進程工作,此時就需要用到分佈式鎖了。本文將介紹 Go 語言生態中基於 Redis 實現的分佈式鎖庫 redsync,並探討其使用方法和實現原理。分佈式鎖首先我們來探討下爲什麼需要分佈式鎖?當我們編寫的程序出現資源競爭的時候,就需要使用互斥鎖來保證併發安全。而我們的服務很有可能不會單 ⌘ Read more
Go 1-24 中改進的 Finalizer:介紹 runtime-AddCleanup
Go 1.24 通過 runtime.AddCleanup 引入了一個新的、改進的 Finalizer 機制。這個函數是對 runtime.SetFinalizer 的重大改進,提供了更多的靈活性、更好的效率和改進的安全性。Finalizer 在 Go 中扮演着關鍵角色,當對象不再可達時運行清理函數。這允許開發者自動執行諸如關閉文件、釋放內存和註銷資源等重要任務。今天我們將探討 runtime.A ⌘ Read more
Xid:Go 輕量級 ID 生成器**
在分佈式系統中,唯一 ID(GUID)是必不可少的,常見的方案包括 UUID、MongoDB ObjectID 和 Twitter Snowflake。其中 UUID 雖然通用,但長度較長,而 Snowflake 需要額外的機器 / 數據中心配置。xid (github.com/rs/xid) 是一個基於 MongoDB ObjectID 算法的更輕量級、更高效的全局唯一 ID 生成庫,用於生成 ⌘ Read more
golang 每日一庫之 concurrent-map
概述orcaman/concurrent-map/v2 是一個 Go 語言的高性能併發安全哈希表實現。它通過分片鎖(shard locking)策略減少鎖競爭,適用於高併發讀寫場景。與標準庫的 sync.Map 不同,該庫針對通用鍵值類型優化,提供更靈活的 API 和更高性能。項目地址GitHub 倉庫 : https://github.com/orcaman/concurrent-Read more
Golang 程序卡死排查指南**
我正在幫助某人設置我的 gokrazy/rsync 實現來同步 RPKI 數據(用於保護 BGP 路由基礎設施),當時我們發現,在特定調用方式下,我的 rsync 接收器會無限期掛起。這個問題很快就解決了,但在這個過程中,我意識到我應該記錄下這些年來我所欣賞的一些 Go 調試技巧!場景:Go 程序掛起----------如果你想跟着實驗,可以構建 gokrazy/rsync 的一個較舊版本,就在修 ⌘ Read more
使用 Golang 編寫 2D 遊戲**
Ebitengine 是一款基於 Go 語言的 2D 遊戲開發引擎,提供了簡單易用的 API 和跨平臺的支持,開發者可以通過它輕鬆構建遊戲項目。核心特性-------跨平臺支持 Ebitengine 支持多個平臺,包括 Windows、macOS、Linux,以及 WebAssembly(可運行於瀏覽器中)。這使得開發者可以在不同設備上運行同一個遊戲項目,而無需編寫額外的代碼。易用的 API ⌘ Read more
golang 面試題:Goroutinue 什麼時候會被掛起?**
今天我們來聊聊一個在 Go 面試中經常遇到的經典問題:Goroutine 什麼時候會被掛起?如果你是一個 Go 程序員,或者正在準備 Go 相關的面試,可能對這個問題有一些疑問。那麼,就讓我從一個資深程序員的角度,帶你們深入淺出地分析這個問題。💡什麼是 Goroutine?首先,咱們得搞清楚什麼是 Goroutine。簡而言之,Goroutine 就是 Go 中的輕量級線程。它讓我們可以用極低的成 ⌘ Read more
golang 每日一庫之 gocarina-gocsv
一、爲什麼選擇 gocsv?Go 標準庫 encoding/csv 提供了基礎的 CSV 讀寫能力,但在處理複雜業務時常常需要:手動轉換字符串到具體類型 維護列索引與結構字段的映射關係 處理嵌套結構等複雜數據類型 處理可選字段和默認值 gocarina/gocsv 通過結構體標籤實現了聲明式的 CSV 解析,極大簡化了開發流程。最新統計顯示,該庫在 GitHub 已獲得 1 ⌘ Read more
Golang 高性能編程:內存對齊的藝術**
有些 Golang 程序運行得像一陣風,而有些卻慢得像在爬坡?答案可能藏在一個不起眼但至關重要的細節裏——內存對齊。今天,我們就來聊聊這個聽起來有點 “硬核”,但其實非常有趣的話題。我會用輕鬆的方式帶你走進內存對齊的世界,分享一些實用技巧和真實案例,讓你的 Golang 程序跑得更快!引言:一次意外的性能提升 -------------那是一個普通的週三下午,我正在優化一個 Golang 項目。 ⌘ Read more
Go 語言 errgroup 庫:強大的併發控制工具**
errgroup 是官方 Go 庫 x 中的一個實用工具,用於併發執行多個 goroutine 並處理錯誤。它基於 sync.WaitGroup 實現了 errgroup.Group,爲併發編程提供了更強大的功能。errgroup 的優勢------------與 sync.WaitGroup 相比,errgroup.Group 具有以下優勢:錯誤處理:sync.WaitGroup 只負責等待 g ⌘ Read more
context-Context - 構建高可用的 Go 應用**
你是否有遇到過這樣的情況:意外的流量激增導致數據庫掛起 系統掛掉,用戶無法訪問 做爲開發人員,你忙於調試問題,事後還會被扣除績效和獎金 不受控制的 goroutines,長時間運行的任務,無響應的 API 這些都會對構建一個高可用的應用造成嚴重影響。這些問題通常源於缺乏適當的上下文管理。無論您是在處理 API 請求、管理數據庫操作,還是構建分佈式系統,掌握上下文都是每個 Go ⌘ Read more
MCP 實戰:使用 Go 快速構建 MCP Server
MCP 簡介MCP 協議(Model Context Protocol,模型上下文協議)是由 Anthropic 於 2024 年 11 月底推出的一種開放標準,旨在統一大型語言模型(LLM)與外部數據源和工具之間的通信。官方地址 https://modelcontextprotocol.io 架構如下 MCP 協議的架構包含多個關鍵組件:Host(宿主程序)、MCP Client(M ⌘ Read more
Go 1-24 新特性:標準庫 os-Root 解析**
背景 --------Go 1.24 已進 release,其版本說明 \[1\] 中包含了多項新特性。本文將重點解析新增的標準庫 os.Root 功能,它能有效防禦目錄遍歷漏洞(Directory Traversal Vulnerabilities)。目錄遍歷漏洞是典型的安全問題,攻擊者通過提供相對路徑(如 ../../../etc/passwd)誘導程序訪問非授權文件。近期真實案例 CVE- ⌘ Read more
Go 項目目錄結構指南**
擁有一個井然有序的目錄結構非常重要,原因有幾個:層次分離:它將項目的不同部分——如業務邏輯、數據訪問和 API 處理——放在各自的文件夾中。這樣,開發人員可以專注於特定領域,而不會感到不知所措或困惑。 更好的組織: 通過整齊地整理你的代碼及其依賴項,較大的項目變得更容易導航。你總是知道在哪裏找到你需要的東西! 可重用性: 一個良好的結構讓你可以創建可以在項目不同部分使用的組件或包,從而 ⌘ Read more
golang 每日一庫 samber-lo
samber/lo 是一個非常流行的 Go 語言庫,它提供了一些常用的函數式編程風格的工具函數,使得 Go 代碼更加簡潔、優雅。該庫的設計理念是減少代碼冗餘,簡化開發過程,尤其是在處理常見的數據結構和算法時。lo 這個庫的名字來源於 "Lazily Optimized" 的縮寫,但它本身並不涉及延遲計算或優化策略。它的目標是提供一系列常見操作的簡便方法,尤其是集合類型(如切片、映射、通道等)的操作 ⌘ Read more
Go 語言之在 Gin 框架中使用 Zap 實現高效日誌管理**
在現代 Web 開發中,日誌管理是確保應用程序性能、穩定性和可維護性的關鍵因素之一。Gin 作爲輕量級的 Go Web 框架,自帶了簡單的日誌功能。然而,對於追求高性能和靈活性的開發者來說,Zap 日誌庫是一個理想的選擇。本文將深入探討如何在 Gin 框架中集成 Zap 日誌庫,實現高效、分級和結構化的日誌記錄。本文介紹瞭如何在 Go 的 Gin 框架中使用 Zap 日誌庫替換默認日誌功能,提供更 ⌘ Read more
golang 每日一庫之 pressly-goose
pressly/goose 是一個用於 Go 語言的數據庫遷移工具。它提供了一種簡單且高效的方式來管理數據庫 schema 的版本控制,適用於數據庫結構變更的管理和遷移。goose 的設計目標是讓數據庫遷移更加簡便、安全,並且在多環境下可以輕鬆應用。數據庫遷移通常用於在應用程序中管理數據模式的變化(例如添加表、修改列、刪除索引等),尤其在團隊協作開發、生產環境發佈等情境下,遷移工具幫助開發者和運維 ⌘ Read more
golang 每日一庫之 iancoleman-orderedmap
github.com/iancoleman/orderedmap 是一個 Go 語言庫,提供了一個有序字典(OrderedMap)實現,區別於 Go 語言內建的 map 類型,內建的 map 是無序的。該庫的 OrderedMap 能夠保持元素的插入順序,因此適用於需要按插入順序遍歷元素的場景。主要特點:有序性:OrderedMap  保證元素的插入順序,和內建的 map 類型不同, ⌘ Read more
Go 編程實踐 - Go Context
1、context 包的引入context 包是在 Go 1.7 引入的,它爲在多個 goroutine 之間傳遞請求範圍的上下文信息和控制 goroutine 的生命週期提供了一種標準的方式。2、context 包的主要作用傳遞上下文信息:context 可用於在 goroutine 之間傳遞請求範圍的數據,如請求的認證信息、請求的截止時間、請求的 ID 等。這些信息在 goroutine 之間 ⌘ Read more
golang 每日一庫之 swaggo
Go Swagger(Swaggo)是一個用於 Go 語言的開源工具集,它幫助開發者自動生成 API 文檔。它利用 Go 的註釋和結構體信息,通過解析代碼,生成符合 OpenAPI 規範的文檔。OpenAPI(也稱爲 Swagger)是一個廣泛使用的 API 規範,它使得 API 文檔更加標準化、易於理解和交互。Swaggo 主要的功能包括:1. 自動生成 OpenAPI 文檔Swaggo 通過解 ⌘ Read more
Go 事件驅動架構:從原理到實戰,徹底掌握高併發編程**
在 Go 語言的世界裏,如何優雅地處理海量併發請求?事件驅動架構(Event-Driven Architecture, EDA)或許是你需要的答案。 🔥 爲什麼你需要關注事件驅動架構? ----------------------在傳統的同步編程模式下,我們通常採用阻塞調用的方式來處理請求。然而,在高併發、高吞吐的場景下,這種方式可能帶來以下問題:線程資源浪費:大量 Goroutine 在 I ⌘ Read more
使用 Go Convey 做 BDD 測試的入門指南**
前面在「Go 代碼測試時怎麼打樁?給大家寫了幾個常用案例」中我們介紹了在單元測試中使用gomonkey爲代碼進行打樁的各種方法。今天我們介紹在 Go 單元測試中另外一個很好用的工具庫goconvey,上面說的gomonkey屬於在 Test Double 方面提供能力,也就是我們通常說的mock,用它們可以自定義一套實現來替換項目中的代碼實現。而goconvey則是一個幫助我們組織和管理測試用例的 ⌘ Read more
Retry-Go:Go 優雅重試**
在 Go 語言的開發過程中,我們經常需要執行可能失敗的操作,比如網絡請求。如果每次失敗都直接報錯並終止程序,用戶體驗就會很差。通常的做法是重試,即在失敗後等待一段時間再嘗試重新執行。retry-go (github.com/avast/retry-go) 是一個輕量級的 Go 語言重試庫,提供簡單易用的「重試機制」,支持:自定義重試策略(固定間隔、指數回退、隨機回退)。 最大重試次數(避免無 ⌘ Read more
HTTP-2 工作原理與 Go 實戰**
在瞭解了上一篇文章的 net/rpc 內容(從 Go 應用中的 net/rpc 到 gRPC)後,現在是時候深入瞭解 HTTP/2 了,它是 gRPC 協議的基礎。HTTP/2 原理及 Go 實戰指南本文偏重理論講解,內容會比較密集。我們主要聚焦 HTTP/2 的核心概念,之後簡要介紹如何在 Go 中啓用它。建議泡杯咖啡,坐下來慢慢看,讓我們一步步拆解這個話題。HTTP/2 優勢--------- ⌘ Read more
使用 Go 構建可擴展的 WebAssembly 應用**
Go 1.24 通過新增 go:wasmexport 指令和構建 WASI 反應器(Reactor)的能力,顯著增強了其 WebAssembly(Wasm)支持。這些特性使開發者能夠將 Go 函數導出到 Wasm 模塊,實現與 Wasm 主機的深度集成,拓展了 Go 在 Wasm 應用開發中的可能性。WebAssembly 與 WebAssembly 系統接口(WASI)------------- ⌘ Read more
golang 每日一庫之 govalidator
govalidator 是一個用 Go 語言編寫的輕量級的驗證庫,提供了豐富的驗證和清理功能,主要用於驗證和清理用戶輸入的數據(如表單數據、API 請求的 JSON 數據等)。它支持常見的數據驗證功能,如電子郵件、URL、IP 地址、信用卡號等的驗證,同時也支持自定義驗證規則。1. 安裝你可以通過 go get 來安裝 govalidator:go get github.com/asaskevic ⌘ Read more
Datatypes:Go 輕鬆支持數據庫 JSON 類型**
GORM 是 Go 語言中最流行的 ORM 之一,它簡化了數據庫操作,提升了開發效率。然而,在某些情況下,標準的數據類型無法滿足複雜業務需求。例如,如何將 Go 中的結構體、切片、JSON 等類型映射到數據庫字段?如何方便地進行序列化和反序列化?爲了解決這些問題,GORM 提供了 datatypes (gorm.io/datatypes) 擴展庫,旨在簡化 Go 語言中複雜數據類型與數據庫字段之間 ⌘ Read more
Go 中的實時批處理: 高效數據處理的藝術**
開篇:當實時性遇見批量處理 --------------在處理大量數據時,我們通常面臨兩個選擇:單條處理 和 批量處理。前者處理及時,但系統開銷大;後者吞吐量高,但可能增加延遲。那麼,有沒有一種方式能兼顧兩者的優勢?答案是——實時批處理(Real-time Batching)。爲什麼選擇 Go? -------------1.1 天生爲併發而生Go 的 Goroutine 和 Channel 機 ⌘ Read more
golang 面試官:for select 時,如果通道已經關閉會怎麼樣?如果只有一個 case 呢?**
今天咱們聊點技術性的東西,具體說一下 Go 語言中的 for select 語句,特別是在面試中經常被問到的兩個問題。題目 1:for select 語句中,如果通道已經關閉了,會怎麼樣?這道題乍一聽簡單,但其實是面試官最喜歡用來考察你是否真正理解 Go 中通道機制的題目之一。假設你在寫一個需要從通道讀取數據的程序,然後突然有人關了通道,你會怎麼處理?程序會怎麼樣?如果你把這個問題想得很簡單,你可 ⌘ Read more
在 go 語言裏用 Redis 如何實現延時任務隊列,如何延時?**
在 Go 語言中,使用 Redis 實現延時任務隊列可以通過 Sorted Set(ZSet) 結合 輪詢機制 或 Pub/Sub 實現。以下是詳細實現方案,以及延時任務與定時任務的區別和應用場景分析。一、延時任務隊列的實現(Go + Redis)核心思路存儲結構:使用 Redis 的 Sorted Set(ZSet),以任務的 執行時間戳 作爲分數(Score),任務內容作爲成員(Member) ⌘ Read more
理解 Go 語言中的 Graceful Shutdown 機制**
當使用 Go 開發 Web 服務時,實現正確的關機處理對於維護系統可靠性和數據完整性至關重要。優雅關機能確保服務在終止前完成現有操作,而不是突然停止導致任務未完成。核心概念解析------優雅關機需要協調終止信號接收、進行中的操作和資源清理。在 Go 中,通常通過信號處理、goroutine 和基於上下文的取消機制來實現。以下是最小化實現示例:package mainimport (    "co ⌘ Read more
Go1-24 新特性:OS 新版本要求、Wasm 功能增強、template 支持迭代器等**
大家好,我是煎魚。新版本 Go1.24 在 2 月 11 號已經正式發佈,如果先前還沒有留到的同學,可以關注下是否跟進了。先前我們已經更新了多篇新特性介紹。今天將會是最後一篇知識點的收尾。操作系統要求------Linux 內核版本 = 3.2在本次 Go1.24 新版本開始,需要 Linux 內核 3.2 版本或更高版本(劃重點)。如果公司裏的集羣環境歷史底蘊比較深的,建議升級前檢查一下。( ⌘ Read more=
分佈式基石算法 一致性 hash
什麼是 一致性 hash 算法---------------首先摘抄一段維基百科的定義  一致哈希 是一種特殊的哈希算法。在使用一致哈希算法後,哈希表槽位數(大小)的改變平均只需要對𝐾/𝑛 個關鍵字重新映射,其中 𝐾 是關鍵字的數量,𝑛是槽位數量。然而在傳統的哈希表中,添加或刪除一個槽位的幾乎需要對所有關鍵字進行重新映射。 --- wikipedia分佈式系統中, 一致性 hash 無處不在,C ⌘ Read more
Go 1-24 的 omitzero:JSON 處理的福音**
使用 omitempty 忽略 JSON 中的可選字段 (Go 1.24 之前)------------------------------------------當你有一個要轉換爲 JSON 的結構體時,你可能有一些字段是可選的。例如,我們採用以下結構體:type Response struct { ID        string    json:"id" // 其他字段省略 UpdatedA ⌘ Read more
用 Go 語言手撕 DNS 協議:從理論到 gothdns 的工程實踐**
在互聯網基礎設施的基石中,DNS(域名系統)堪稱最優雅的分佈式系統設計典範。這個將域名轉換爲 IP 地址的魔法系統,每秒處理着數以億計的查詢請求。Go 語言憑藉其簡潔的併發模型和高效的網絡編程能力,成爲實現 DNS 協議的絕佳選擇。理解 DNS 協議需要把握三個核心要素:分層樹狀結構的域名空間 UDP/TCP 雙協議支持 資源記錄(RR)的二進制編碼規範 Go 語言標準庫中的ne ⌘ Read more
Go 語言反向代理實戰:零壓力承載百萬流量**
在現代分佈式系統中,反向代理扮演着數字交通警察的角色。它不僅是客戶端與服務端之間的智能中介,更是系統架構中不可或缺的流量調度中心。典型的應用場景包括:負載均衡:智能分配請求到後端服務器集羣 安全防護:作爲安全邊界過濾惡意請求 協議轉換:統一處理不同通信協議 緩存加速:對靜態資源進行邊緣緩存 服務聚合:整合多個微服務的響應結果 Go 語言憑藉其獨特的併發模型和卓越的性能 ⌘ Read more
Go 語言中如何高效地處理集合**
在 Go 語言中,處理集合(如切片、映射等)時,可以通過多種方式提高效率。以下是一些常見的高效處理集合的方法,結合詳細的代碼例子進行講解。1. 使用切片(Slice)代替數組切片是 Go 中常用的集合類型,它比數組更靈活,因爲切片的長度是可變的。package mainimport "fmt"func main() { // 創建一個切片 numbers := \[\]int{1, 2, ⌘ Read more
=
告別 WebSocket?探索 SSE 爲 Go 應用帶來的全新可能**
在現代 Web 應用開發中,實時通信一直是一個重要的需求。傳統上,WebSocket 是實現實時雙向通信的首選方案。然而,隨着技術的發展,Server-Sent Events (SSE) 這一輕量級的單向實時通信技術正在獲得越來越多的關注。本文將深入探討 SSE 技術,並通過實例說明爲什麼在某些場景下它可能比 WebSocket 更適合您的 Go 應用。SSE 是什麼?--------Server ⌘ Read more
Go 併發控制:sync-Map 詳解**
我們知道,Go 中的 map 類型是非併發安全的,所以 Go 就在 sync 包中提供了 map 的併發原語 sync.Map,允許併發操作,本文就帶大家詳細解讀下 sync.Map 的原理。使用示例sync.Map 提供了基礎類型 map 的常用功能,使用示例如下:package mainimport ("fmt""sync")func main() {var s sync.Map// 存儲鍵值 ⌘ Read more
Go 併發控制 Wait - Cancel
Wait 和 Cancel 兩種併發控制方式,在使用 Go 開發服務的時候到處都有體現,只要使用了併發就會用到這兩種模式。在 Go 語言中,分別有 sync.WaitGroup 和 context.Context 來實現這兩種模式。sync.WaitGroup 等待多個線程完成對於要等待 n 個線程完成後再進行下一步的同步操作的做法,使用 sync.WaitGroup 來等待一組事件:func m ⌘ Read more
Golang Web 單體項目目錄結構最佳實踐**
在 Golang 開發 Web 項目的過程中,如何組織目錄結構是一項至關重要的任務。合理的目錄結構不僅能提高代碼的可維護性,還能爲團隊協作提供清晰的代碼規範。今天,我們就來探討一個 Golang Web 單體項目的最佳目錄結構,並通過詳細的代碼示例解析其中的分層設計,以下就是我的最佳實踐方案。爲什麼要設計合理的目錄結構?在 Golang 項目中,代碼的組織方式會影響開發效率和項目的擴展性。如果目錄 ⌘ Read more
Golang 使用反射實現漏洞插件管理**
在安全檢測領域,我們經常需要實現一個插件體系,以支持和管理不同類型的漏洞檢測插件。例如,SQL 注入掃描、XSS 檢測等插件應該可以動態加載、統一管理,並按需執行。本文將會介紹如何使用 Golang 反射(reflection) 構建一個可擴展的漏洞檢測插件系統,包括 插件註冊、管理、調用,我會提供完整的 demo 代碼和項目結構來幫助你理清思路。下面就開始我們今天的內容吧!!!🚀🚀🚀項目目錄結構 ⌘ Read more
Go 併發 Bug 殺手鐧:如何正確處理 Goroutines 中的錯誤?**
📌 引言-----你是否遇到過這樣的情況:明明 Goroutine 已經執行,但程序結果卻異常? 錯誤似乎消失了,日誌中卻找不到任何線索? Goroutine 發生 panic,主程序卻沒有任何反應? 這些問題的根本原因通常是 Goroutines 中的錯誤處理缺失。如果沒有正確捕獲和處理錯誤,Go 的併發機制可能會讓 Bug 變得難以察覺,甚至導致程序崩潰。本文將深入剖析 G ⌘ Read more
golang 每日一庫之 spf13-viper
spf13/viper 是一個非常流行的 Go 語言庫,主要用於處理應用程序的配置文件。它提供了一種靈活且強大的方式來讀取、解析和管理不同來源的配置數據,比如文件、環境變量、命令行參數等。Viper 以其簡潔、易用以及高度的可定製性在 Go 生態中廣受歡迎。1. Viper 的核心功能Viper 主要用於配置管理,它支持從不同來源加載配置、處理複雜的數據結構、以及提供對配置項的靈活訪問。以下是 V ⌘ Read more
在 Go 中如何將 [][]byte 轉爲 io-Reader ?**
起因:在春節前的某一天,我在 ekit 項目的交流羣裏看到大明老師發了這樣一條消息: 各位大佬,問個小問題,有咩有誰用過 byte 轉爲 io.Reader 的東西?我以前搞過一次,但是我忘了是我手搓了一個實現,還是用的開源的,還是 SDK 自帶的並且大明老師還爲此開了一個 issue。看到這條消息,我想起了我在對 Go 還不太熟悉時,曾寫過一個 io.MultiReader 的實現(當時寫完了 ⌘ Read more
解密 Go 語言中的雙生函數:main-- 與 init-- 的隱祕世界**
在 Go 語言的開發實踐中,main()和init()這兩個看似簡單的函數,承載着程序生命週期的核心邏輯。它們如同程序世界的守門人,一個負責搭建舞臺,另一個負責拉開帷幕。本文將通過深度剖析二者的差異,揭示它們在 Go 運行時系統中的運作機制,並提供多個完整代碼示例幫助開發者掌握正確使用姿勢。 函數本質與定位差異---------main():程序的唯一入口main()函數是每個可執行 Go 程序的 ⌘ Read more
Go 項目裏的 API 對接,這樣做 Mock 測試才舒服**
我們在開發項目的過程中總會遇到要調用依賴方接口的情況,如果依賴方的 API 接口還沒有開發好,通常我們會先約定好 API 接口的請求參數、響應結構和各類錯誤對應的響應碼,再按照約定好請求和響應進行開發。除了上面說的情況外,還有一種就是當你開發的功能需要與微信支付類的 API 進行對接時,因爲各種訂單、簽名、證書等的限制你在開發階段也不能直接去調用支付的 API 來驗證自己開發的程序是否能成功完成對 ⌘ Read more
Golang Option 模式看這一篇就夠了**
在 Go 語言中,我們經常需要定義結構體,並通過構造函數初始化它們。然而,Go 不支持默認參數,如果一個結構體有很多可選參數,我們會面臨以下問題:構造函數參數過長,調用時不夠直觀。 需要維護多個 NewXXX 函數,擴展性較差。 代碼可讀性降低。 爲了解決這個問題,Golang 社區廣泛採用 Option 模式,讓我們可以優雅地管理可選參數。本文將詳細講解 Option 模式的 ⌘ Read more
基於 Go 語言構建高性能併發鍵值存儲**
在分佈式系統和高併發場景中,鍵值存儲(Key-Value Store)作爲基礎組件扮演着至關重要的角色。本文將通過 Go 語言實現一個線程安全的併發鍵值存儲系統,深入探討其設計原理、性能優化策略以及實際應用場景。 爲什麼選擇 Go 語言?------------Go 語言憑藉其原生的併發模型(goroutine 和 channel)、高效的內存管理以及簡潔的語法,成爲構建高性能併發系統的理想選擇。 ⌘ Read more
Go channel 計數信號量**
Go 併發設計的一個慣用法就是將帶緩衝 channel 用作計數信號量(counting semaphore)。帶緩衝 channel 中的當前數據個數代表的是當前同時處於活動狀態(處理業務)的 goroutine 的數量,而帶緩衝 channel 的容量(capacity)就代表了允許同時處於活動狀態的 goroutine 的最大數量。向帶緩衝 channel 的一個發送操作表示獲取一個信號量, ⌘ Read more
在 Go 中實現 TOTP 認證:實踐指南**
時間性一次性密碼(TOTP)已成爲現代應用中實現雙因素認證(2FA)的標準。在本指南中,我們將探討如何在 Go 中使用流行的 github.com/pquerna/otp 庫實現 TOTP。 什麼是 TOTP?---------TOTP 生成臨時密碼,這些密碼在短時間內(通常是 30 秒)有效。這項技術是 Google Authenticator、Authy 等認證器應用背後的核心技術。TOTP ⌘ Read more
Go 語言流式編程,實現高效數據處理!**
在 Go 語言開發中,傳統的數據處理方式往往採用for循環配合切片操作的模式。但隨着業務複雜度提升,這種模式逐漸暴露出內存佔用高、代碼可讀性差、擴展性弱等問題。流式編程(Stream Processing)作爲一種聲明式編程範式,通過構建數據處理管道(Pipeline),爲這些問題提供了優雅的解決方案。流式編程的核心在於將數據處理過程分解爲多個獨立的操作階段,每個階段專注於單一職責。這種模式具有以 ⌘ Read more
golang 每日一庫之 shopspring-decimal
shopspring/decimal 是一個用於處理任意精度十進制浮點數的 Go 語言庫,通常用於金融計算、貨幣相關計算等場景。標準的 float64 類型可能無法滿足精確度要求,因爲浮點數的表示方式是近似的,特別是在進行累加、除法和精確比較時可能會導致舍入誤差。shopspring/decimal 提供了一個高精度的十進制類型 decimal.Decimal,它確保在進行數學運算時不丟失精度。這 ⌘ Read more
golang 每日一庫之 jinzhu-copier
這都 2025 年了,你還在一個一個手動複製字段嗎?jinzhu/copier 是一個 Go 語言庫,用於深度複製結構體(struct)及其字段,支持嵌套結構體、切片、數組等的複製。這個庫的主要目標是通過簡單的 API 提供高效、易用的對象複製功能,避免手動編寫複製邏輯。核心特性:深度複製支持深度複製結構體及其嵌套字段,包括切片、數組、映射(map)等。 對象的字段會遞歸地被複制到目標對象中 ⌘ Read more
Go 併發控制:semaphore 詳解**
今天我們來介紹一個 Go 官方庫 x 提供的擴展併發原語 semaphore,譯爲 “信號量”。因爲它就像一個信號一樣控制多個 goroutine 之間協作。概念講解我先簡單介紹下信號量的概念,爲不熟悉的讀者作爲補充知識。一個生活中的例子:假設一個餐廳總共有 10 張餐桌,每來 1 位顧客佔用 1 張餐桌,那麼同一時間共計可以有 10 人在就餐,超過 10 人則需要排隊等位;如果有 1 位顧客就餐 ⌘ Read more
使用 Golang 監控網絡速度**
使用 Golang 監控網絡速度----------------在分佈式系統、實時應用和流媒體服務中,監控網絡速度可以幫助識別潛在的瓶頸、優化性能並提升用戶體驗。本文將介紹如何使用 Golang 構建一個高效的網絡速度監控工具,適合技術人員學習和參考。引言--網絡速度監控對於確保系統穩定運行至關重要。隨着互聯網用戶需求的增長,檢測網絡帶寬、下載和上傳速度成爲關鍵任務。Golang 以其高效的併發 ⌘ Read more
Go 表達式引擎之理解與使用 cel-go
在現代應用中,表達式求值引擎已經成爲許多系統不可或缺的一部分。它可以讓業務邏輯與代碼分離,爲動態規則配置提供極大的靈活性。而 Google 開源的 cel-go (Common Expression Language for Go) 就是這樣一款輕量級、高性能的表達式求值引擎。無論你是初學者還是需要在項目中集成 cel-go,這篇文章都將帶你從入門到精通!什麼是 CEL 和 cel-go?CEL( ⌘ Read more
Go 項目實戰 - 讓自定義 Error 支持 Go 的 errors-Is 判定以及原型模式的應用**
經過前面三節高代碼強度的學習,相信大家都已經有點累了,本節我們不着急繼續 “趕路”,休息片刻!我們換個輕鬆點的話題,聊一聊咱們項目定製化 Error--AppError 怎麼支持 Go 語言的 errors.Is 判定,以及項目預定義的那些 Error 在實際使用過程中某些情況下會出現循環引用的問題,我們會利用一個原型設計模式來解決這個問題。項目定製化 Error 回顧-------------- ⌘ Read more
Go os-exec 極速入門**
os/exec 是 Go 提供的內置包,可以用來執行外部命令或程序。比如,我們的主機上安裝了 redis-server 二進制文件,那麼就可以使用 os/exec 在 Go 程序中啓動 redis-server 提供服務。當然,我們也可以使用 os/exec 執行 ls、pwd 等操作系統內置命令。本文不求內容多麼深入,旨在帶大家極速入門 os/exec 的常規使用。極速入門如下是 os/exec ⌘ Read more
Go 語言主流安全庫使用指南**
Secure Middleware - Secure-----------------------------secure 是一個 HTTP 中間件,提供了多種安全相關的特性。1.1 基礎使用secure 中間件提供了多個重要的安全選項,每個選項都針對特定的安全威脅:package mainimport (    "net/http"    "github.com/unrolled/secure ⌘ Read more
Go 併發機制解密:Goroutine 調度**
Goroutine 是 Go 編程語言中一個極具特色的設計,也是其併發能力的核心亮點之一。Goroutine 本質上是一種協程(Coroutine),是實現並行計算的關鍵。使用 Goroutine 非常簡單,只需通過 go 關鍵字即可啓動一個協程,協程會以異步方式運行。程序無需等待 Goroutine 完成即可繼續執行後續代碼。go func() // 使用 go 關鍵字啓動一個協程 II. Go ⌘ Read more
淺談 Go 語言 Optional 模式和 Builder 模式**
在 Go 語言中,Optional 模式和 Builder 模式都是用於對象構建和配置的重要設計模式,但它們各自具有獨特的特點和應用場景。但是使用起來也是非常的類似,就好比電動車和摩托車,都能讓你不費太多力氣的騎行,把你送到目的地,這篇文章我們就來討論一下這兩個模式的本質區別和不同的使用場景。我們首先聲明一個結構體,後面我們就研究使用兩種不同方式來創建這個結構體的實例:type Person st ⌘ Read more
用 Go 語言併發處理 CSV 文件到數據庫**
問題背景假設你擁有一個包含大量聯繫人信息的 CSV 文件,需要將這些信息遷移到數據庫中。這些聯繫人信息可能包含姓名、電話號碼、郵箱地址等。如果使用傳統的單線程方式,逐條處理數據,遷移過程可能會非常緩慢,尤其是在數據量很大時。在處理大量的 CSV 文件數據並遷移到數據庫時,使用併發可以顯著提升處理效率。Go 語言的 goroutine 和通道(channel)非常適合用來併發地處理數據。下面我將給出 ⌘ Read more