yue-fang-readfog-go 

feeds.twtxt.net

No description provided.

Go channel 計數信號量
Go 併發設計的一個慣用法就是將帶緩衝 channel 用作計數信號量(counting semaphore)。帶緩衝 channel 中的當前數據個數代表的是當前同時處於活動狀態(處理業務)的 goroutine 的數量,而帶緩衝 channel 的容量(capacity)就代表了允許同時處於活動狀態的 goroutine 的最大數量。向帶緩衝 channel 的一個發送操作表示獲取一個信號量, ⌘ Read more

⤋ Read More

在 Go 中實現 TOTP 認證:實踐指南
時間性一次性密碼(TOTP)已成爲現代應用中實現雙因素認證(2FA)的標準。在本指南中,我們將探討如何在 Go 中使用流行的 github.com/pquerna/otp 庫實現 TOTP。 什麼是 TOTP?———TOTP 生成臨時密碼,這些密碼在短時間內(通常是 30 秒)有效。這項技術是 Google Authenticator、Authy 等認證器應用背後的核心技術。TOTP ⌘ Read more

⤋ Read More

Go 語言流式編程,實現高效數據處理!
在 Go 語言開發中,傳統的數據處理方式往往採用for循環配合切片操作的模式。但隨着業務複雜度提升,這種模式逐漸暴露出內存佔用高、代碼可讀性差、擴展性弱等問題。流式編程(Stream Processing)作爲一種聲明式編程範式,通過構建數據處理管道(Pipeline),爲這些問題提供了優雅的解決方案。流式編程的核心在於將數據處理過程分解爲多個獨立的操作階段,每個階段專注於單一職責。這種模式具有以 ⌘ Read more

⤋ Read More

golang 每日一庫之 shopspring-decimal
shopspring/decimal 是一個用於處理任意精度十進制浮點數的 Go 語言庫,通常用於金融計算、貨幣相關計算等場景。標準的 float64 類型可能無法滿足精確度要求,因爲浮點數的表示方式是近似的,特別是在進行累加、除法和精確比較時可能會導致舍入誤差。shopspring/decimal 提供了一個高精度的十進制類型 decimal.Decimal,它確保在進行數學運算時不丟失精度。這 ⌘ Read more

⤋ Read More

golang 每日一庫之 jinzhu-copier
這都 2025 年了,你還在一個一個手動複製字段嗎?jinzhu/copier 是一個 Go 語言庫,用於深度複製結構體(struct)及其字段,支持嵌套結構體、切片、數組等的複製。這個庫的主要目標是通過簡單的 API 提供高效、易用的對象複製功能,避免手動編寫複製邏輯。核心特性:深度複製支持深度複製結構體及其嵌套字段,包括切片、數組、映射(map)等。 對象的字段會遞歸地被複制到目標對象中 ⌘ Read more

⤋ Read More

Go 併發控制:semaphore 詳解
今天我們來介紹一個 Go 官方庫 x 提供的擴展併發原語 semaphore,譯爲 “信號量”。因爲它就像一個信號一樣控制多個 goroutine 之間協作。概念講解我先簡單介紹下信號量的概念,爲不熟悉的讀者作爲補充知識。一個生活中的例子:假設一個餐廳總共有 10 張餐桌,每來 1 位顧客佔用 1 張餐桌,那麼同一時間共計可以有 10 人在就餐,超過 10 人則需要排隊等位;如果有 1 位顧客就餐 ⌘ Read more

⤋ Read More

使用 Golang 監控網絡速度
使用 Golang 監控網絡速度—————-在分佈式系統、實時應用和流媒體服務中,監控網絡速度可以幫助識別潛在的瓶頸、優化性能並提升用戶體驗。本文將介紹如何使用 Golang 構建一個高效的網絡速度監控工具,適合技術人員學習和參考。引言–網絡速度監控對於確保系統穩定運行至關重要。隨着互聯網用戶需求的增長,檢測網絡帶寬、下載和上傳速度成爲關鍵任務。Golang 以其高效的併發 ⌘ Read more

⤋ Read More

Go 表達式引擎之理解與使用 cel-go
在現代應用中,表達式求值引擎已經成爲許多系統不可或缺的一部分。它可以讓業務邏輯與代碼分離,爲動態規則配置提供極大的靈活性。而 Google 開源的 cel-go (Common Expression Language for Go) 就是這樣一款輕量級、高性能的表達式求值引擎。無論你是初學者還是需要在項目中集成 cel-go,這篇文章都將帶你從入門到精通!什麼是 CEL 和 cel-go?CEL( ⌘ Read more

⤋ Read More

Go 項目實戰 - 讓自定義 Error 支持 Go 的 errors-Is 判定以及原型模式的應用
經過前面三節高代碼強度的學習,相信大家都已經有點累了,本節我們不着急繼續 “趕路”,休息片刻!我們換個輕鬆點的話題,聊一聊咱們項目定製化 Error–AppError 怎麼支持 Go 語言的 errors.Is 判定,以及項目預定義的那些 Error 在實際使用過程中某些情況下會出現循環引用的問題,我們會利用一個原型設計模式來解決這個問題。項目定製化 Error 回顧————– ⌘ Read more

⤋ 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

⤋ Read More

Go 語言主流安全庫使用指南
Secure Middleware - Secure—————————–secure 是一個 HTTP 中間件,提供了多種安全相關的特性。1.1 基礎使用secure 中間件提供了多個重要的安全選項,每個選項都針對特定的安全威脅:package mainimport (    ”net/http”    ”github.com/unrolled/secure ⌘ Read more

⤋ Read More

Go 併發機制解密:Goroutine 調度
Goroutine 是 Go 編程語言中一個極具特色的設計,也是其併發能力的核心亮點之一。Goroutine 本質上是一種協程(Coroutine),是實現並行計算的關鍵。使用 Goroutine 非常簡單,只需通過 go 關鍵字即可啓動一個協程,協程會以異步方式運行。程序無需等待 Goroutine 完成即可繼續執行後續代碼。go func() // 使用 go 關鍵字啓動一個協程 II. Go ⌘ Read more

⤋ Read More

淺談 Go 語言 Optional 模式和 Builder 模式
在 Go 語言中,Optional 模式和 Builder 模式都是用於對象構建和配置的重要設計模式,但它們各自具有獨特的特點和應用場景。但是使用起來也是非常的類似,就好比電動車和摩托車,都能讓你不費太多力氣的騎行,把你送到目的地,這篇文章我們就來討論一下這兩個模式的本質區別和不同的使用場景。我們首先聲明一個結構體,後面我們就研究使用兩種不同方式來創建這個結構體的實例:type Person st ⌘ Read more

⤋ Read More

用 Go 語言併發處理 CSV 文件到數據庫
問題背景假設你擁有一個包含大量聯繫人信息的 CSV 文件,需要將這些信息遷移到數據庫中。這些聯繫人信息可能包含姓名、電話號碼、郵箱地址等。如果使用傳統的單線程方式,逐條處理數據,遷移過程可能會非常緩慢,尤其是在數據量很大時。在處理大量的 CSV 文件數據並遷移到數據庫時,使用併發可以顯著提升處理效率。Go 語言的 goroutine 和通道(channel)非常適合用來併發地處理數據。下面我將給出 ⌘ Read more

⤋ Read More

使用 Go 構建基於時間的一次性密碼 -TOTP- 生成器
前言–現在很多網站都開啓了 2FA(Two-Factor Authentication,雙因素認證),如 GitHub、Google、微軟等。這種額外的安全層顯著提高了賬戶的安全性。本文將深入探討如何使用 Go 語言實現 TOTP 生成器,並詳細解釋其工作原理和安全考慮原理解析—-兩步驗證要求用戶提供兩種不同形式的身份驗證:知識因素:用戶知道的信息(如密碼) 所有權因素:用戶擁有的設 ⌘ Read more

⤋ Read More

HTTP 代理的原理和實現
HTTP 代理可以說是每個開發者都繞不開的工具。幾乎每天都會使用,但你真的瞭解 HTTP 代理的原理嗎? 說明:這裏討論的 HTTP 代理是指 HTTP Proxy Server,具體是正向 HTTP 代理服務端的原理和實現。想了解 HTTP 代理的原理,最嚴謹的方法是閱讀 RFC 文檔,但這同時也是最困難的方式。今天,我將介紹一種更直觀的學習技巧。從名字上就可以看出,HTTP 代理基於 HTT ⌘ Read more

⤋ Read More

Go Gin 源碼分析:上下文複用與 Goroutine 中的潛在坑
前言如果你看過Go 語言中Gin 框架的官方文檔,你可能會注意到一條重要的提醒:當在中間件或 handler 中啓動新的 Goroutine 時,不能使用原始的上下文,必須使用只讀副本。文檔中還提供了以下示例代碼:func main() { r := gin.Default() r.GET(“/longasync”, func(c gin.Context) {// 創建在 goroutine 中使 ⌘ Read more

⤋ Read More

Go 指針進階:從入門到被虐,90- 開發者都踩過這些坑!
指針是 Go 語言中最強大但也最容易出錯的特性之一。本文將帶你從基礎概念到高級應用,全方位掌握 Go 指針的使用技巧。無論你是初學者還是老手,都能在這裏找到價值。一、指針基礎:從零開始什麼是指針? Go 語言中的指針是一個用來存儲變量內存地址的變量,可以使用 & 運算符獲取變量的地址,使用 `` 運算符獲取指針所指向的變量的值,可以進行運算來移動指針。var a int = 10var p ⌘ Read more

⤋ Read More

如何使用 Golang 進行 Kafka 的監控
Kafka 是一個高吞吐量、可擴展的分佈式消息系統,廣泛應用於實時數據流處理場景。監控 Kafka 是確保其平穩運行和及時處理問題的關鍵。本文將介紹如何使用 Golang 來執行 Kafka 的監控任務。前置準備—-安裝依賴庫: 安裝 Sarama,用於 Kafka 的操作$ go get github.com/Shopify/sarama 安裝 Kafka 管理擴展$ go get g ⌘ Read more

⤋ Read More

Go: 如何寫出內存泄露的程序
不管使用什麼語言,內存泄露是經常遇到的一類問題,然而使用 Go 語言編寫內存泄露的代碼卻不容易,本文將列舉幾個可能出現內存泄露的場景,從反例中學習如何避免內存泄露。資源泄露—-不關閉打開的文件當你不再需要一個打開的文件, 正常你需要調用它的 Close 方法, 如果你不調用 Close,就有可能文件描述符達到最大限制,無法再打開新的文件或者連接, 程序會報too many open files ⌘ Read more

⤋ Read More

爲你的 Go 應用添加定時任務
在 Linux 上,我們經常使用計劃任務來執行一些定時任務,比如,在凌晨執行數據庫備份、進行賬務日結操作等。在我們的 Golang 應用中,我們也想執行一些定時任務,怎麼辦?cron 是 Golang 的一個定時任務庫,被廣泛應用於 Golang 應用中。cron 目前使用的 V3 版本,默認支持 Linux cron 表達式,沒有秒的字段。Linux cron 表達式格式:      comma ⌘ Read more

⤋ Read More

設計模式 in Go: Observer
行爲模式旨在解決對象間通信和交互相關的問題,專注於定義那些複雜到無法靜態設計的協作策略,這些協作策略使得程序可以在運行時動態地進行職責派遣以實現更好的擴展。今天我們開始第 8 個行爲模式的學習 —— Observer(觀察者模式)。問題背景:—–觀察者模式用於當對象之間存在一對多關係時,即一個對象的變化需要傳播給多個其他對象。它允許被觀察對象的狀態發生變化時,其他依賴對象能自動收到通知並進行 ⌘ Read more

⤋ Read More

Go Protobuf 新增全新不透明 API
Protobuf 是 Google 的語言中立的數據交換格式。早在 2020 年 3 月,就發佈了 google.golang.org/protobuf 模塊,這是對 Go protobuf API 的重大修訂。該包引入了對反射的一流支持、一個 dynamicpb 實現和 protocmp 包,以便於測試。現在,我們將爲生成的代碼發佈一個新的 API,我們將說明創建新 API 的動機,並展示如何在 ⌘ Read more

⤋ Read More

高性能 Gin 框架原理學習教程
作者:jiayan 工作中的部分項目使用到了 gin 框架,因此從源碼層面學習一下其原理。1. 概述Gin 是一款高性能的 Go 語言 Web 框架,Gin 的一些特性:快速 基於 Radix 樹的路由,小內存佔用,沒有反射,可預測的 API 性能。 支持中間件 傳入的 HTTP 請求可以由一系列中間件和最終操作來處理,例如:Logger,Authorization,GZIP,最終操作 D ⌘ Read more

⤋ Read More

Golang 中的 Context 如何讓代碼更智能、更安全、更易於擴展
Go 開發中,context 包已經成爲一個必不可少的工具。它提供了一種在不同的 goroutine 之間傳遞請求範圍內變量、取消信號和截止時間的方法。通過合理地使用 context,我們可以使代碼變得更智能、更安全,並且更易於擴展。本文將詳細探討 context 的作用以及如何在實際開發中應用它。什麼是 Context?————context 是 Go 1.7 引入的一個標準庫 ⌘ Read more

⤋ Read More

設計模式 in Go: Strategy
行爲模式旨在解決對象間通信和交互相關的問題,專注於定義那些複雜到無法靜態設計的協作策略,這些協作策略使得程序可以在運行時動態地進行職責派遣以實現更好的擴展。 今天我們開始第 9 個行爲模式的學習 —— Strategy(策略模式)。問題背景:—–策略模式用於當有多種可以互換的算法或策略來完成特定任務時。使用這些算法的客戶端不需要知道算法的具體實現細節。解決方案:—–定義一個所 ⌘ Read more

⤋ Read More

設計模式 in Go: Mediator
行爲模式旨在解決對象間通信和交互相關的問題,專注於定義那些複雜到無法靜態設計的協作策略,這些協作策略使得程序可以在運行時動態地進行職責派遣以實現更好的擴展。今天我們開始第 7 個行爲模式的學習 —— Mediator(中介者模式)。問題背景:—–中介模式用於當一組對象需要以鬆散耦合的方式相互通信時。在複雜系統中,對象之間的直接通信會導致緊耦合和增加複雜性。中介模式有助於集中和控制對象間的通信 ⌘ Read more

⤋ Read More

Golang workspace 多模塊工作區是真的好
最近,使用了 Golang workspace,它是真的好。今日推薦給大家。Golang 在 1.18 版本開始支持多模塊工作區。使用多模塊工作區,可以幫助您同時在多個模塊中編寫代碼,並在這些模塊中輕鬆構建和運行代碼。要創建多模塊工作區,請確保你安裝的 Go 版本在 1.18 及以上纔行。我們以 Windows 爲例,演示如何創建工作區。一、創建一個目錄叫 workspace,這個是工作區的名稱。 ⌘ Read more

⤋ Read More

微服務的終極 Golang 框架:GoFr
前言–Go 語言因其出色的併發處理能力和簡潔的語法,成爲開發微服務的理想選擇。而 GoFr 框架則是一個專門爲構建 Go 微服務而設計的框架,它提供了一套完整的工具和最佳實踐,幫助開發者快速構建可靠的微服務應用。GoFr 框架簡介———GoFr 是一個專注於簡單性和性能的微服務框架。它的主要特點包括:零依賴:框架本身不依賴於任何第三方包 高性能:經過優化的路由和中間件系統 ⌘ Read more

⤋ Read More

使用 Buf 和 Nix 構建 Go 語言 gRPC 服務
在本文中,我們將探討如何在 Go 中構建一個可擴展且易於管理的 gRPC 服務。我們將使用 Buf 來管理 Protocol Buffers(Protobuf),並藉助 Nix 創建一個一致且可復現的開發環境。Buf 提供了一種高效且有組織的方式來管理 Protobuf,而 Nix 則確保開發環境在不同系統之間的一致性。通過本指南的學習,你將能夠構建一個具有清晰代碼結構和良好可維護性的完整 gRP ⌘ Read more

⤋ Read More

設計模式 in Go: Template Metho
行爲模式旨在解決對象間通信和交互相關的問題,專注於定義那些複雜到無法靜態設計的協作策略,這些協作策略使得程序可以在運行時動態地進行職責派遣以實現更好的擴展。今天我們開始第 5 個行爲模式的學習 —— Template Method(模版方法)。問題背景:—–在設計一系列步驟的算法時,有些步驟可能在各個子類中都是通用的,而其他步驟則會有所不同。如果我們每個子類都實現所有步驟,將會產生大量重複代 ⌘ Read more

⤋ Read More

Go gRPC 和微服務架構的基礎與設計與實戰
微服務架構是一種將單體應用分解成一組獨立的小服務的架構模式,服務之間通過輕量級協議(如 HTTP 或 RPC)進行通信。相比傳統的單體架構,微服務架構具有高靈活性和擴展性,使團隊可以在開發、測試和部署上實現高度的自治。要深度理解微服務架構的基礎和設計。一. 微服務基礎1. 微服務架構的核心基礎—————–服務劃分(Service Partitioning) 微服務的核心是將應 ⌘ Read more

⤋ Read More

NSQ 分佈式消息隊列的最佳實踐 - Go 語言實戰指南!
NSQ 是由 Go 語言編寫的一個分佈式實時消息隊列系統,以其簡單、高性能和可擴展性著稱。今天咱們就來深入瞭解如何在實際項目中最佳地運用 NSQ,讓你的系統既穩定又高效!NSQ 架構簡介——–NSQ 採用分佈式架構,主要包含以下核心組件:nsqd: 接收、排隊、投遞消息的守護進程 nsqlookupd: 管理拓撲信息並提供發現服務 nsqadmin: Web 管理界面,用於實 ⌘ Read more

⤋ Read More

設計模式 in Go: State
行爲模式旨在解決對象間通信和交互相關的問題,專注於定義那些複雜到無法靜態設計的協作策略,這些協作策略使得程序可以在運行時動態地進行職責派遣以實現更好的擴展。今天我們開始第 4 個行爲模式的學習 —— State Pattern(狀態模式)。問題背景:———當一個對象的行爲需要根據其內部狀態的變化而變化時,通常的做法是使用 if-else 語句來處理不同的情況。然而,隨着狀態和行爲數量的 ⌘ Read more

⤋ Read More

golang 新一代標準日誌庫 slog
log/slog 是 Go 1.21 引入的一個新的日誌記錄包,旨在提供比傳統 log 包更靈活和現代化的日誌功能。它支持結構化日誌、可配置的日誌級別、靈活的日誌輸出格式等功能,彌補了舊版 log 包的不足。對比舊版 log 包 | 特性 | log | slog || — | — | — || 日誌級別支持 | 無 | 內置支持(Debug、Info 等) || 結構化日誌 | ⌘ Read more

⤋ Read More

Go 語言中嘗試延遲執行一個函數
Go 編程語言提供了豐富的特性,使得像 Google 這樣的大型公司能夠高效地進行軟件開發。它爲許多雲服務提供商和分佈式服務的底層基礎設施提供支持,同時保持了簡單易學的特點。在 Go 中,我們可以根據需要使用指針類型和值類型。在本文中,我們將探討一個有趣的使用場景。函數調用中的切片和映射傳遞————-通常,在 Go 中調用函數時,切片(slice)和映射(map)並不是通過指針傳遞 ⌘ Read more

⤋ Read More

用 Option 模式和對接層簡化和管理 Go 項目的外部 API
在項目開發實現功能需求的過程中不可避免的要與外部第三方系統進行交互,這些交互大部分是通過請求 API 接口來完成的。前幾節提到但一直沒帶大家用代碼過一遍的 Lib 層就是負責寫第三方對接邏輯的,通過把跟第三方對接的邏輯限制在 Lib 層裏,讓項目的其他部分不需要關注第三方的邏輯,從而達到每部分都職責分明,這樣項目的代碼多起來後纔不會變得臃腫和雜亂。不過在演示 Lib 層的使用前我們需要先一起給項目 ⌘ Read more

⤋ Read More

Go 源碼是如何解決測試代碼循環依賴問題的?
最近我寫了一篇講解 context 包源碼的文章《Go 併發控制:context 源碼解讀》,在閱讀源碼的過程中,我在 context 包測試代碼中發現了一個解決循環依賴的小技巧,在此分享給大家。xtest.go 解決循環依賴context 包源碼目錄結構如下: https://github.com/golang/go/tree/go1.23.0/src/context$ tree contex ⌘ Read more

⤋ Read More

Go 語言五種實現 broadcaster 的方法,你喜歡哪一種?
昨天看到 Jaana Dogan 創建了一個 broadcaster 的庫, 話說美女 Jaana Dogan 又回到了 Google 了麼。她的實現我們就當做 broadcaster 的第一個實現吧。什麼是 broadcaster?就是村口的大喇叭,一播音,全村都知道了。Jaana Dogan 實現的這個 broadcaster 只有通知的功能,沒有傳遞消息,也不能重用。我們就以這個庫爲基準,看 ⌘ Read more

⤋ Read More

用 Go 實現 TCP 連接的雙向拷貝
在做網絡編程時,我們常常會遇到各種性能問題,尤其是在面對大量連接和高併發的情況下。今天,我就來聊聊如何用 Go 實現一個高效的 TCP 連接的雙向拷貝機制,幫助你減少延遲、提高吞吐量。這篇文章既適合對網絡編程有一定了解的開發者,也適合那些想要進一步提升性能的程序員。首先,給大家簡要介紹一下 “TCP 連接的雙向拷貝” 是什麼意思。簡單來說,這就是將來自一個連接的數據拷貝到另一個連接,通常這種操作是 ⌘ Read more

⤋ Read More

設計模式 in Go:Prototype
建造模式,處理與創建對象及對象實例化過程相關的問題,通常尋求以分離業務代碼和對象創建邏輯,或將複雜的構造邏輯封裝在可重用組件中的方式。讓我們來探討第四種創建模式——原型模式。問題背景: 我們有一個對象,你要創建它的一個拷貝。您可以採用什麼方法來實現這一點?也許您需要知道該對象所屬的類型,從而能夠創建新的同樣類型的對象,然後將原始對象中每個字段值複製到新對象中。該類包含一些隱藏字段,因此你無法複製 ⌘ Read more

⤋ Read More

asyncgo,純 Go 編寫的異步執行器
Asyncgo[1] 是純用 Go 編寫的零依賴異步任務執行器,優先考慮速度和易用性。特徵–異步任務執行:提交任務以異步執行並檢索結果。 無需手動管理 Goroutine :抽象化管理 Goroutine 的複雜性,並簡化代碼。 工作池管理:Asyncgo 仔細處理工作池創建和任務執行。 正常關閉:確保在關閉工作線程之前完成所有現有任務。 任務取消:支持終端終止任務。 ⌘ Read more

⤋ Read More

設計模式 in Go: Memento
行爲模式旨在解決對象間通信和交互相關的問題,專注於定義那些複雜到無法靜態設計的協作策略,這些協作策略使得程序可以在運行時動態地進行職責派遣以實現更好的擴展。今天我們開始第 3 個行爲模式的學習 —— Memento(備忘錄模式)。問題背景:在我們需要記錄和恢復對象的內部狀態,而又不希望破壞封裝原則時,可以使用備忘錄模式。有時,我們需要在特定時間點保存對象的狀態,並能夠在以後恢復該狀態。然而,直接暴 ⌘ Read more

⤋ Read More

Gin 框架怎麼實現驗證請求參數和返回響應數據的函數?
大家好,我是 frank。「Golang 語言開發棧」公衆號作者。01 介紹在使用 Gin 框架開發時,入口函數通常需要支持驗證請求參數和返回響應數據。我們可以將驗證請求參數和返回響應數據整合爲一個通用函數。然後,結合響應數據返回中間件,實現通過一個函數,實現驗證請求參數和返回響應數據 的功能。02 請求參數驗證和返回響應數據首先,我們需要定義一個自定義結構體類型 Response,示例代碼: ⌘ Read more

⤋ Read More

HeapMap: 一個混合功能的數據結構 Go 語言實現
今天在準備《祕而不宣》系列下一篇文章時,思緒飄散了,突然想到使用 Heap 的功能再加 HashTable (Map) 的功能,可以構造一種新的數據結構,然後把我聚合程序中的數據聚合數據結構替換掉,總之思緒翩翩。然後在網上搜了一下,這種數據結構其實早就有了,名字叫 HeapMap。HeapMap (也叫做 PriorityMap) 是一種結合了堆和哈希映射的數據結構,常用於需要按鍵排序並進行高效查 ⌘ Read more

⤋ Read More

Go 高級構建指南
本文將探索 Golang 高級構建技巧,從而有助於創建更高效的二進制文件。原文: Advanced Go Build Techniques[1]構建選項以下是 go build 命令最常用的一些選項:-o: 指定輸出文件名。默認輸出文件名是主軟件包的名稱,在 Windows 系統中會自動添加 .exe 後綴。 -v: 詳細輸出。該選項會在編譯時打印軟件包的名稱。 -work: 打印 ⌘ Read more

⤋ Read More

ROG:高性能 Go 實現
本文根據字節跳動服務框架團隊研發工程師在 CloudWeGo 技術沙龍暨三週年慶典中演講內容《ROG——高性能 Go 實現》整理。 作者|不願意透露姓名的小劉市民ROG 之緣起ROG 的誕生是因爲我們一部分業務使用 Rust 重寫之後,獲得了非常好的收益,比如 AVG、CPU、MEM、P99,這些數據表現非常好,大約節省了接近 50% 的 CPU,內存大大降低。這個性能數據讓人眼紅,因此 ⌘ Read more

⤋ Read More

Go - Ollama 在本地構建你的 RAG 應用
這篇文章會引導大家使用 Golang 設置本地大型語言模型 (LLM) 並與之交互,以此在本地構建你的 AI 應用。設置本地 LLM首先,我們需要在本地計算機上運行 LLM。爲此,我們將使用 Ollama(可在 GitHub ollama[1] 上獲取)。雖然本地加載模型有多種選擇,但我發現 Ollama 是相對容易使用的。Ollama 支持 macOS、Linux 和 Windows。本文的代碼 ⌘ Read more

⤋ Read More

從理論到實踐:Go 項目中的整潔架構設計
前言你維護的Go 項目代碼架構是什麼樣子的?六邊形架構?還是洋蔥架構?亦或者是DDD?無論項目採用的是什麼架構,核心目標都應是一致的:使代碼能夠易於理解、測試和維護。本文將從Bob 大叔的整潔架構(Clean Architecture)出發,簡要解析其核心思想,並結合go-clean-arch 倉庫,深入探討如何在Go 項目中實現這一架構理念。準備好了嗎?準備一杯你最喜歡的咖啡或茶,隨着本文一探究 ⌘ Read more

⤋ Read More

推薦一個 Go 版本的支付庫
gopay 是一個使用 Golang 編寫的支付庫。現在支持微信、支付寶、QQ、通聯支付、拉卡拉、PayPal。使用方法如下:引入 gopay 庫go get -u github.com/go-pay/gopay使用示例:import ( “github.com/go-pay/gopay” “github.com/go-pay/xlog”)func main() { xlog.I ⌘ Read more

⤋ Read More