yue-fang-readfog-go 

feeds.twtxt.net

No description provided.

分佈式搜索引擎,你真的懂嗎?
*一、分佈式搜索引擎簡介(一) 概念分佈式搜索引擎通過在多臺服務器上分配索引和搜索負載, 實現索引和搜索吞吐能力的橫向擴展。主要特徵: 索引和搜索負載分佈在多臺服務器 支持大規模數據和訪問量 (二) 與集中式搜索引擎區別集中式搜索引擎在單個節點上完成全部工作, 硬件資源限制其擴展能力。分佈式搜索引擎通過分佈式計算技術, 實現可橫向擴展的大規模搜索引擎。(三) 優勢 處理更多文檔, 支持 ⌘ Read more

⤋ Read More

Go Module 語義化版本規範
Go Module 的設計採用了語義化版本規範,語義化版本規範非常流行且具有指導意義,本文就來聊聊語義化版本規範的設計和在 Go 中的應用。語義化版本規範語義化版本規範(SemVer)是由 Gravatars 創辦者兼 GitHub 共同創辦者 Tom Preston-Werner 所建立,旨在解決 依賴地獄 問題。它清楚明瞭的規定了版本格式、版本號遞增規:版本格式:採用 X.Y.Z 的格式,X ⌘ Read more

⤋ Read More

Golang 使用 Zookeeper 實現分佈式鎖
什麼是分佈式鎖?——–分佈式鎖是一種在分佈式系統中用於控制併發訪問的機制。在分佈式系統中,多個客戶端可能會同時對同一個資源進行訪問,這可能導致數據不一致的問題。分佈式鎖的作用是確保同一時刻只有一個客戶端能夠對某個資源進行訪問,從而避免數據不一致的問題。分佈式鎖的實現通常依賴於一些具有分佈式特性的技術,如 ZooKeeper、Redis、數據庫等。這些技術提供了在分佈式環境中實現互斥訪問的 ⌘ Read more

⤋ Read More

Golang 流水線設計模式實踐
流水線設計模式對於順序處理業務數據非常有用,可以以一致的方式直觀的定義對數據的處理流程。原文: Using a Pipeline Pattern in Golang[1]到目前爲止,我已經將 Golang 整合到項目中有一段時間了,Golang 是一種非常強大的語言,我渴望在其生態系統中進一步磨練技能。基於項目的特定需求,我需要實現流水線模式 (Pipeline Pattern),數據需要通過 ⌘ Read more

⤋ Read More

Go Gin 框架與 Let’s Encrypt 集成指南
本文將深入探討如何在 Go 語言的 Gin 框架中集成 Let’s Encrypt,以實現自動化管理 SSL/TLS 證書。Let’s Encrypt 作爲一個免費、自動、開放的證書頒發機構,能讓 HTTPS 部署變得簡單便捷。通過該教程,您將瞭解到如何配置 Gin 以支持 HTTPS 服務,並自動從 Let’s Encrypt 申請和續簽證書,確保 Web 應用的安全可靠性。爲什麼需要 Let’ ⌘ Read more

⤋ Read More

Golang 如何有效限制併發數?
Go 語言目前很火熱,一部分原因在於自身帶 “高併發” 的標籤,其本身就擁有優秀的併發量和吞吐量。1 協程可以無限創建嗎?我們在日常開發中會有高併發場景,有時會用多協程併發實現。在高併發業務場景,能否可以隨意開闢 goroutine 並且放養不管呢?畢竟有強大的 GC 和優越的 GMP 調度算法。看下面的代碼:package mainimport (    ”fmt”    ”math”    ” ⌘ Read more

⤋ Read More

用 Go 語言實現劉謙春晚魔術,還原尼格買提汗流浹背的尷尬瞬間-
龍年春晚如期而至,想必大家都看(沒)完(眼)了(看)吧,今年春晚最搞笑節目,當屬劉謙的魔術:《守歲共此時》,不過笑點不是節目本身,而是本場魔術的 托兒(主持人)尼格買提。小尼:已經開始流汗了 😅。本文將帶大家一起用 Go 語言來還原下整個魔術的過程。 在開始寫代碼前,翻車畫面必須置頂 🤣:這是一個公式魔術,即有着固定的套路,從數學角度來看是一個「約瑟夫問題」(嚴格證明可以在網上搜到,如果你感興趣 ⌘ Read more

⤋ Read More

在 Golang 中 如何實現 NATS JetStream 隊列
NATS JetStream 是一個高性能、持久化、分佈式消息隊列系統,它爲發佈 / 訂閱、隊列和流式處理提供了豐富的功能。在 Go 中實現 NATS JetStream 隊列可以通過 NATS 客戶端庫來完成。一、NATS JetStream 的歷史NATS JetStream 是 NATS 消息系統的一個重要組件,旨在提供持久性消息傳遞和流處理功能。下面是 NATS JetStream 的歷史 ⌘ Read more

⤋ Read More

程序員必會的任務調度實踐
*1. 延時任務系統介紹延時任務系統 (Delayed Job System) 是一種用於設置任務在將來的某個時刻自動觸發執行的機制。定義:延時任務系統使作業 / 任務能夠在未來的某個預定義時間運行。簡單來說, 就是一種可以設置任務在未來執行的系統。延時任務系統的主要特點是:時間觸發: 根據預設的時間來自動觸發任務執行可靠性: 具備容錯能力, 防止任務丟失擴展性: 可以水平擴展, 提高吞吐量靈活性 ⌘ Read more

⤋ Read More

精心設計的 DNS Failover 策略在 Go 中竟然帶來了反效果,發生了什麼?
本期作者衛智雄嗶哩嗶哩高級運維工程師一. 背景如下配置所示,我們在 /etc/resolv.conf 中配置了兩個 nameserver,其中 server2 在災備機房 ,作爲一種 failover 策略。nameserver server1nameserver server2options timeout:1 attempts:1我們的預期是如果 server1 服務正常,則所有的 DNS 請 ⌘ Read more

⤋ Read More

Go Gin 框架定義路由日誌格式
在本文中,我們將深入探討如何在 Go 語言的 Gin 框架中自定義路由日誌的格式。Gin 是一個高性能的 HTTP web 框架,它提供了一個默認的日誌格式,但在實際的開發環境中,我們可能需要根據特定的業務需求調整日誌輸出的格式。我們將從瞭解 Gin 的默認日誌格式開始,逐步地引導你自定義和擴展路由日誌的輸出方式。文章內容將詳實介紹相關的代碼實現,以確保你能夠在自己的工作中靈活運用。Gin 框架默 ⌘ Read more

⤋ Read More

Go 更強的代碼潔癖,可以把 gofmt 給換了!
大家好,我是煎魚。我們從一開始寫 Go 代碼和應用,就會被各種官方和民間教程,甚至 IDE 教導我們必須配一個 gofmt 工具。他能夠格式化 Go 程序的代碼。會使用製表符表示縮進,空白表示對齊。這解決了程序員屆的老大難問題之一,代碼格式上的規範問題。有效的提高了 Go 代碼的閱讀的友好度和減少了同事間的 ****。非常值得認可。但有時候,還是會看到一些糟心的代碼,總會覺得 gofmt,還是格式 ⌘ Read more

⤋ Read More

Go 中最常用的數據校驗庫
項目地址: github.com/go-playground/validator/v10| 標記 | 標記說明 | 例 || — | — | — || required | 必填 | Field 或 Struct validate:“required” || omitempty | 空時忽略 | Field 或 Struct validate:“omitempty” || len ⌘ Read more

⤋ Read More

Go Gin 框架的模型綁定與驗證詳解
在 Web 開發中,模型綁定和驗證是確保數據完整性和減少安全風險的重要步驟。Go 語言的 Gin 框架提供了強大而靈活的模型綁定和驗證機制,本文將深入講解 Gin 框架中如何進行模型綁定和驗證,以及如何自定義驗證器。在 Gin 框架中,模型綁定通常指將請求的數據(例如 JSON、表單數據)綁定到指定的結構體上,而驗證則是確保綁定後的數據符合我們設置的規則。Gin 框架使用binding標籤來實現模 ⌘ Read more

⤋ Read More

Go 語言版本 1-22 的路由增強功能
Go 1.22 對 net/http包中的路由器進行了兩項增強:方式匹配和通配符。這些特性允許你將常見的路由表示爲模式,而非 Go 代碼。儘管這些功能簡單易解釋和使用,但想選擇成功模式的正確規則(當多個模式匹配一個請求時)依然是個挑戰。我們作出這些改變是爲了持續讓 Go 成爲構建生產系統的優秀語言。我們研究了許多第三方 web 框架,提取出我們認爲最常用的特性,並將它們集成進 net/http。然 ⌘ Read more

⤋ Read More

使用 Gin 框架中的 PureJSON 發送未轉義的 JSON
當我們使用 Go 的 Gin web 框架來構建 RESTful API 時,通常會遇到返回 JSON 響應的需求。Gin 框架提供了c.JSON方法來以 JSON 格式發送回覆,同時它會對特殊字符進行轉義,比如把 < 轉換爲 \u003c。但在某些情況下,我們需要發送未轉義的 JSON 數據,這時我們就可以使用 Gin 框架中的c.PureJSON方法。在 Gin 框架中,c.PureJSON方 ⌘ Read more

⤋ Read More

GO 中高效 int 轉換 string 的方法與源碼剖析
Go 語言 中,將整數(int)轉換爲字符串(string)是一項常見的操作。本文將從逐步介紹幾種在 Go 中將 int 轉換爲 string 的常見方法,並重點剖析這幾種方法在性能上的特點。另外,還會重點介紹 FormatInt 高效的算法實現。使用 strconv.Itoa—————–最直接且常用的方法是使用 strconv 包中的 Itoa 函數。Itoa 是 “Int ⌘ Read more

⤋ Read More

Golang 實現協程池
Go 協程池解決的問題:當需要創建大量的goroutine的時候,如果不限定goroutine的數量,將是對程序的巨大災難 使用完的goroutinue可以複用繼續執行下一個任務(而不是立即銷燬),如果每次都是創建新goroutinue執行任務,頻繁的創建銷燬goroutinue導致利用率低下 項目地址 https://github.com/gofish2020/easygpool 歡 ⌘ Read more

⤋ Read More

Go Gin 框架中間件中使用 Goroutine 的正確姿勢
在 Go 語言的 Gin 框架中,中間件和處理函數是處理 HTTP 請求的核心。有時候,我們需要在這些函數中啓動新的 Goroutine 來執行併發任務。然而,在 Goroutine 中直接使用 Gin 的上下文(gin.Context)可能會導致競態條件,因爲 Gin 的上下文不是併發安全的。本文將詳細介紹如何在 Gin 中間件或處理函數中正確地使用 Goroutine,並提供示例代碼來說明如何 ⌘ Read more

⤋ Read More

Go 防止流量過載的利器——限流組件
*一、服務流量限制的重要性隨着業務規模的增長, 服務的流量也會激增, 大流量可能會壓垮服務器, 導致服務癱瘓。因此需對服務的流量進行限制, 確保在大流量的情況下也能正常運行。當流量激增時, 會佔用大量服務器資源和帶寬, 可能會壓垮整個系統。比如流量激增期間數據庫連接用盡, 會導致服務無法訪問數據庫而宕機。用限制流量可以有效防止流量暴增壓垮系統。沒有限流時, 流量激增期間會啓動很多無用的任務佔用服務 ⌘ Read more

⤋ Read More

Go Gin 項目記錄日誌的最佳實踐
在任何一個複雜的軟件項目中,日誌記錄是必不可少的。無論是調試程序、監控系統狀態,還是統計用戶行爲,日誌都扮演了重要的角色。在 Go 的世界裏,Gin 是一種快速,簡單,靈活,優雅的 Web 框架,同時也提供了豐富的日誌記錄功能。本文將分享在 Gin 項目中如何進行高效的日誌記錄。創建 Gin 實例與中間件使用—————在創建 Gin 實例時,gin.Default()會默認加載 ⌘ Read more

⤋ Read More

使用 Go 打造百億級文件系統的實踐之旅
JuiceFS 企業版是一款爲雲環境設計的分佈式文件系統,單命名空間內可穩定管理高達百億級數量的文件。構建這個大規模、高性能的文件系統面臨衆多複雜性挑戰,其中最爲關鍵的環節之一就是元數據引擎的設計。JuiceFS 企業版於 2017 年上線,經過幾年的不斷迭代和優化,在單個元數據服務進程使用 30 GiB 內存的情況下,能夠管理約 3 億個文件,並將元數據請求的平均處理時間維持在 100 微秒量級 ⌘ Read more

⤋ Read More

Go1-22 新特性:增強 http-ServerMux 路由能力,將有更強的表現力!
大家好,我是煎魚。Go1.22 有一個比較重要的新特性,那就是基於提案《net/http: enhanced ServeMux routing[1]》,增強了 http.ServerMux 的路由匹配能力。非常值得大家學習和關注。本次的新特性主要是新增了 HTTP 方法和路徑變量的支持。快速學習—-在 Go 中,可以認爲幾乎所有的路由相關的庫都會基於 net/http 或是兼容其 interf ⌘ Read more

⤋ Read More

收到請求數據的常用安全驗證方案,go 語言,gin 框架
在使用 Gin 框架處理前端請求數據時,必須關注安全性問題,以防範常見的攻擊。本文將探討 Gin 框架中常見的安全問題,並提供相應的處理方法,以確保應用程序的穩健性和安全性。第一章:概述———-1.1 安全性的重要性處理前端請求數據時,確保應用程序的安全性是至關重要的。常見的攻擊方式包括 SQL 注入、跨站腳本攻擊(XSS)、跨站請求僞造(CSRF)等。下面我們將逐一探討這些問題及其處 ⌘ Read more

⤋ Read More

Go 語言通知協程退出 -取消- 的幾種方式
在 Go 語言中,控制 goroutine 的退出或取消很重要,這能使資源得到合理利用,避免潛在的內存泄露。如下是一些在 Go 中通知協程退出的常見方式:使用通道(Channel):通過發送特定的信號或關閉通道來通知協程退出。這是最簡單直接的方法。 使用 context 包:context 包提供了一種更標準化的方式來傳遞取消信號、超時、截止時間等控制信息。 使用 sync.Wait ⌘ Read more

⤋ Read More

使用 Go Gin SecureJSON 技術保護你的 JSON 數據
網絡上的安全問題一直是不能小覷的難題,尤其在 web 開發中,JSON 劫持就是其中的一種。這篇文章,我們將聚焦在 Go 框架 Gin 下的 SecureJSON 使用,來保護我們的 JSON 數據。什麼是 JSON 劫持?————JSON 劫持是一種網絡攻擊手段,攻擊者利用 JavaScript 的這個特性獲取到不屬於自己的數據。由於 JSON 數據一般包含非常敏感的個人信息,例 ⌘ Read more

⤋ Read More

替代 zap,Go 語言官方實現的結構化日誌包
在 Go 1.21 中,引入了一個新的 log 包 – log/slog,這是一個強大的日誌記錄庫,提供了許多用於幫助開發人員更加有效地記錄、管理和理解日誌的工具。無論你是一個初級還是高級的 Go 開發人員,理解和掌控 go 的日誌系統是非常有用的。接下來,讓我們深入研究一下 Go 中的日誌行爲,並通過實例來詳細理解每個主要功能。安裝–在 Go 1.21 中,log/slog 是系統自帶的,無 ⌘ Read more

⤋ Read More

Wasm on Go
本篇內容,是對極客兔兔: Go WebAssembly (Wasm) 簡明教程 [1] 的實踐與記錄,主體內容來自這篇博客,推薦閱讀原文。 是否需要搭建 wasm 環境? WebAssembly 上手 [2]如果是 C/C++,需要藉助 emcc,將 C 和 C++ 代碼編譯到 WebAssembly 和 JavaScript。在 Mac 上,brew install emscripten然後 ⌘ Read more

⤋ Read More

Go Web 開發不得不說的請求路由
*1. 請求路由的概念請求路由的定義:請求路由是指將客戶端的請求與服務器上對應的處理程序匹配和映射的過程。它決定了不同的 URL 或 API 請求被映射到哪些處理函數。請求路由的作用:請求路由實現了請求與處理函數之間的解耦,使代碼更加模塊化。同時,它也使得 URL 和 API 更符合 RESTful 設計規範。請求路由還可以實現諸如負載均衡、緩存、日誌記錄、身份驗證等功能。2. net/http ⌘ Read more

⤋ Read More

使用 Go 發送微信羣消息
背景最近的某個副業需要我寫一個腳本(腳本內容就不說了),需要通知羣成員,儘快地做出響應。所以去找一下 Go 是否有這樣的類庫。在這個腳本里面,我只需要發送信息的能力即可。openwechat在尋找了一會之後發現 https://github.com/eatmoreapple/openwechat 這個庫,這個庫支持以下能力:消息回覆、給指定對象(好友、羣組)發送文本、圖片、文件、emoji 表情等 ⌘ Read more

⤋ Read More

Go 實現多租戶示例
在 Go 中實現多租戶 (multi-tenancy) 通常涉及到下面幾個關鍵步驟:租戶識別: 你需要一個機制來區分請求是針對哪個租戶的。這可以通過多種策略實現,比如在 HTTP 請求的 URL、Header 或者是 Cookie 中嵌入租戶 ID。 數據隔離: 根據你選擇的數據隔離策略(如數據庫、schema 或者數據表的隔離),你需要確保租戶只能訪問到屬於他們的數據。 中間件 / ⌘ Read more

⤋ Read More

Go Gin 框架實現優雅地重啓和停止
在 Web 應用程序中,有時候我們需要重啓或停止服務器,無論是因爲更新代碼還是進行例行維護。在這種情景下,我們需要保證應用程序的可用性和數據的一致性。這就需要優雅地關閉和重啓應用程序,即不丟失正在處理的請求和不拒絕新的請求。在本文中,我們將詳解如何在 Go 語言中使用 Gin 這個框架實現優雅的重啓和停止。什麼是優雅重啓和停止———-優雅地重啓或停止一個 Web 服務就是指當我們需要更 ⌘ Read more

⤋ Read More

Golang 有必要實現 async-await 嗎?
前言 今天在某站上面看到一個大佬解釋 Golang 中的錯誤處理 err !=nil 時,直接用 Javascript 的 async/await 來解釋。async/await 語法糖在 C#, Python 和 Javascript 中是很常見的異步協程寫法,而在 Golang 中則是使用 goroutine 機制。這時習慣或者喜歡 async/await 語法糖的人可能就會有疑問:Gola ⌘ Read more

⤋ Read More

史上最詳細的 Gin 中間件使用教程
在本文中,我們將深入討論 Go-Gin 的中間件,詳細瞭解它們呈現如何有效地在任何特定的 Web 應用程序中插播操作。此外,我們還將瀏覽一些示例,幫助大家更好地理解。什麼是中間件?——-在討論 Gin 中間件之前,首先我們需要明確中間件的概念。中間件基本上是一個函數,它在您的應用程序收到請求和發送響應之間插播處理。在實際開發中,中間件被廣泛用於處理如日誌記錄、身份驗證、會話管理等方面。Gi ⌘ Read more

⤋ Read More

圖文講透 Golang 標準庫 net-http 實現原理 – 服務端
前言今天分享下 Go 語言 net/http 標準庫的內部實現邏輯,文章將從客戶端 (Client)– 服務端(Server) 兩個方向作爲切入點,進而一步步分析 http 標準庫內部是如何運作的。由於會涉及到不少的代碼流程的走讀,寫完後覺得放在一篇文章中會過於長,可能在閱讀感受上會不算很好,因此分爲【Server–Client 兩個篇文章】進行發佈。本文內容是【服務端 Server 部分】, ⌘ Read more

⤋ Read More

Go 司空見慣的錯誤檢測,原來還有這麼多幹貨-
*一、錯誤處理機制Go 語言以結果多值返回方式處理錯誤, 函數或者方法最後一個返回值作爲錯誤類型。func ReadFile(filename string) ([]byte, error)調用時根據錯誤值判斷是否正常data, err := ReadFile(“abc.txt”)if err != nil { // 處理錯誤} else { // 處理data}error 類型及其意義 ⌘ Read more

⤋ Read More

ebpf-go 初體驗
前言我們在《用 eBPF/XDP 來替代 LVS》系列、《一張圖感受真實的 TCP 狀態轉移》系列,以及《如何終結已存在的 TCP 連接?》系列文章中,均通過純 C 語言和 libbpf1 這個庫來運用 eBPF。但是很多的場景中(尤其是雲原生場景),我們出於避免重複造輪子、更快的迭代速度、運行時安全等原因,會選擇 go 語言來進行開發,ebpf-go2 這個庫就是當前最好的選擇。今天,我們就對 ⌘ Read more

⤋ Read More

Go 使用 cmux 實現網絡端口複用
cmux 的作用——– 一般情況下, 每個端口只能爲一個服務所用, 如果複用, 會報 “port is already in use”如果需要複用某個端口, 那麼可以使用 cmux 來實現 (其實大多數情況下必要性不大. 比如我就圖 8888 端口吉利, http/grpc 等服務都用這個端口)cmux[1] 全稱 Connection Mux, 是 Go 生態來複用端口的庫, 可 ⌘ Read more

⤋ Read More

Go 信號 - 守護進程開發爬坑指南
*一、信號 (signal) 處理信號是 Linux 系統下進程間通信的一種限制式異步通知機制。一個信號可以傳遞一個事件通知給一個進程, 代表一個異步事件。Go 語言內置了對信號的支持, 通過 os/signal 包可以實現 Go 程序對信號的處理。1.1 什麼是信號信號 (Signal) 是 Linux 系統下進程間通信的一種方式。當某個事件發生時, 內核會通知進程一個信號。進程接收到信號後, ⌘ Read more

⤋ Read More

Go 一文帶你喫透 HTTP 客戶端!
*1. HTTP 請求簡介HTTP(Hypertext Transfer Protocol) 是構建 web 應用通信的基石。HTTP 工作於客戶端 - 服務端架構上。HTTP 客戶端發起請求, 服務器接收請求並返回響應。HTTP 請求主要由請求行、請求頭、請求體組成請求行 GET /search?name=Golang HTTP/1.1請求頭部 Host: www.baidu ⌘ Read more

⤋ Read More

Go 定時器:Timer 和 Ticker
前言在日常開發中,我們可能會遇到需要延遲執行或週期性地執行一些任務。這個時候就需要用到 Go 語言中的定時器。在 Go 語言中,定時器類型有兩種:time.Timer 一次性定時器和 time.Ticker 週期性定時器。本文將會對這兩種定時器類型進行介紹。準備好了嗎?準備一杯你最喜歡的咖啡或茶,隨着本文一探究竟吧。Timer:一次性定時器Timer 是一個一次性的定時器,用於在未來的某一時刻執行 ⌘ Read more

⤋ Read More

Gofr - 簡化微服務開發的編程框架
背景介紹在微服務開發過程中,我們常常遇到各類問題。例如,REST 默認的標準難以踐行、在企業級規模上的挑戰、數據庫狀態管理、錯誤管理等等。以往,我們需要手動進行配置、對各個部分進行維護和測試。但隨着 Gofr 的出現,這一切都可以得到解決。今天要給大家推薦一個 GitHub 開源項目 gofr-dev/gofr,該項目在 GitHub 有差不多 1000 Star,用一句話介紹該項目就是:“An ⌘ Read more

⤋ Read More

千萬級高性能長連接 Go 服務架構實踐
作者 | glstr導讀 introduction移動互聯網時代,長連接服務成爲了提升應用實時性和互動性的基礎服務。本文主要介紹了百度系內基於 golang 實現的統一長連接服務。主要從統一長連接功能實現和性能優化等角度,描述了統一長連接服務在設計、開發和維護過程中面臨的問題和挑戰,重點介紹瞭解決相關問題和挑戰的解決方案和實踐經驗。01摘要移動互聯網時代,用戶對服務的實時性、互動性有了更高的要求, ⌘ Read more

⤋ Read More

golang 中如何使用 kafka
Kafka 是一種備受歡迎的流處理平臺,具備分佈式、可擴展、高性能和可靠的特點。在處理 Kafka 數據時,有多種最佳實踐可用來確保高效和可靠的處理。本文將介紹這些實踐方法,並展示如何使用 Sarama 來實現它們。Kafka 消費的最佳實踐取決於你的使用場景和需求,以下是一些建議:1 使用 Consumer Group: 在生產環境中,建議使用 Consumer Group,這樣可以確保多個消費 ⌘ Read more

⤋ Read More

Go 語言實戰:構建強大的延遲任務隊列
01 介紹延遲隊列是一種數據結構,用於處理需要在未來某個特定時間執行的任務。這些任務被添加到隊列中,並且指定了一個執行時間,只有到達指定的時間點時才能從隊列中取出並執行。在實際應用中,延遲隊列可以用於處理各種需要延遲處理的任務,例如發送郵件提醒、訂單自動取消、對超時任務的處理等。由於任務的執行是在未來的某個時間點,因此這些任務不會立即執行,而是存儲在隊列中,直到它的預定執行時間纔會被執行。02 S ⌘ Read more

⤋ Read More

原來可以這麼使用 Protobuf
*1. Protobuf 簡介1.1 Protobuf 是什麼Protocol Buffers (簡稱 Protobuf) 是 Google 公司開源的一種輕便高效的結構化數據存儲格式, 以及用於序列化和反序列化結構化數據的代碼生成器。它可以用於通訊協議和數據存儲等領域。Protobuf 是以 .proto 文件形式定義結構化數據的方式和格式。並且通過代碼生成器生成各平臺 (Java、C++、Py ⌘ Read more

⤋ Read More

基於 go 實現 lsm tree 之主幹框架
0 導讀去年 4 月的時候,我和大家分享了一篇文章——初探 rocksDB 之 lsm tree,和大家一起探討了 lsm tree 結構的底層實現原理. 秉着 【基於源碼支撐原理】 的一貫原則,從本期開始,咱們把源碼篇的坑填上.接下來我將開啓一個新的專題——基於 go 語言從零到一實現 lsm tree,本專題共分爲下述四篇內容:• 基於 go 實現 lsm tree 之主幹框架(本篇) ⌘ Read more

⤋ Read More

Go 語言與 gRPC 的完美結合
*一、gRPC 簡介gRPC(Remote Procedure Call) 是一種遠程過程調用技術, 通過壓縮和序列化數據來優化網絡通信, 可以顯著提高服務調用的性能和效率。gRPC 的概念gRPC 是一個高性能、通用的開源 RPC 框架, 是一個由 Google 主導開發的 RPC 框架。其以 HTTP/2 爲基礎通信協議, 支持多種語言, 通過 protocol buffers 數據格式來實現 ⌘ Read more

⤋ Read More

Go 調用 C– 動態庫實現車牌識別
前言—–很久沒更新博客,這次正好趁着這次機會來更新一個稍微有點意思的內容,利用 C++ 中 Opencv、TensorRT 等庫編譯出動態庫供 Go 調用,再寫個簡單的 api 對上傳的車輛圖片進行車牌識別。究其原因,天下苦 Java 久矣,每次寫 JNI 去給公司 Java 後端服務調用,而我不喜歡 Java 那我每次寫好的模型動態庫就到此爲止了?白白浪費之前那麼多計算資源於心不忍,因此打 ⌘ Read more

⤋ Read More

Go 插件機制詳解:原理、設計與最佳實踐
*1. Go 語言插件基礎1.1 插件概述插件是一種動態加載的代碼單元, 它可以在程序運行期間被動態加載和掛接到主程序上, 從而擴展主程序的功能。Go 語言從 1.8 版本開始, 通過 plugin 包提供了對插件的初步支持。利用插件, 可以在不需要重新編譯主程序的情況下, 動態地擴展主程序的功能, 做到高內聚低耦合。1.2 插件的定義和結構從實現上看, Go 語言的插件就是一個獨立編譯的 dyn ⌘ Read more

⤋ Read More