Go 性能度量利器,完全替代 io-Reader 和 io-Writer!

在 Go 語言的世界裏,io.Readerio.Writer 接口是數據流處理的基石。然而,標準庫並沒有提供一種便捷的方式來追蹤通過這些接口傳輸的字節數。metered-io 庫應運而生,它提供了 io.Readerio.Writer 的替代品,並能夠方便地獲取傳輸的字節總數,爲性能度量和監控提供了強大的支持。

metered-io 庫簡介

metered-io 庫的核心價值在於其對標準庫 io.Readerio.Writer 接口的無縫替換。它提供了一系列函數,用於創建封裝了原始 reader 和 writer 的 metered reader 和 writer 對象。這些 metered 對象在保留原有功能的基礎上,還能夠記錄傳輸的字節數,並通過簡單的方法供開發者獲取。

使用 metered-io 庫

安裝

使用以下命令即可輕鬆安裝 metered-io 庫:

go get github.com/samber/go-metered-io

創建 Metered Reader

metered.NewReader 函數用於創建一個 metered reader 對象:

import "github.com/samber/go-metered-io"

r := metered.NewReader(strings.NewReader("Hello, world!"))

讀取數據並獲取傳輸字節數

使用 metered reader 讀取數據的方式與標準庫 io.Reader 完全相同。讀取完成後,可以通過 Rx() 方法獲取已讀取的字節數:

buf := make([]byte, 5)
n, err := r.Read(buf) 
// ... 處理數據和錯誤 ...
totalBytes := r.Rx()

創建 Metered Writer

類似地,metered.NewWriter 函數用於創建一個 metered writer 對象:

var buf bytes.Buffer
w := metered.NewWriter(&buf)

寫入數據並獲取傳輸字節數

使用 metered writer 寫入數據的方式與標準庫 io.Writer 完全相同。寫入完成後,可以通過 Tx() 方法獲取已寫入的字節數:

n, err := w.Write([]byte("Hello, world!"))
// ... 處理錯誤 ...
totalBytes := w.Tx()

metered-io 庫的優勢

應用場景

總結

metered-io 庫是一個簡單易用但功能強大的工具,爲 Go 開發者提供了便捷的字節計數功能,極大地簡化了性能度量和監控的開發工作。其無縫替換標準庫接口的設計理念,使得開發者可以輕鬆地將其集成到現有項目中,並從中受益。

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/_zELlhcrOpZSPqaIgvXp5g