go 中的性能基準測試衡量函數效率,通過在以 benchmark 開頭的函數中編寫基準測試代碼實現(xiàn)。testing.b 類型提供 resettimer()、stoptimer() 和 n 屬性控制基準測試行為。例如,計算斐波那契數的函數基準測試表明執(zhí)行 fib(30) 需要約 2,767,425 納秒。優(yōu)化基準測試代碼以避免開銷,多次運行以獲得準確結果。
Go 函數測試中的性能基準測試
性能基準測試是衡量函數效率的重要工具。在 Go 中,testing
包提供了針對函數執(zhí)行時間的基準測試功能。
編寫性能基準測試
編寫一個性能基準測試需要創(chuàng)建一個以 Benchmark
開頭的函數,后面跟上要測試的函數名:
func BenchmarkFib(b *testing.B) { // 基準測試代碼 }
登錄后復制
使用 testing.B
testing.B
類型提供以下方法來控制基準測試:
ResetTimer()
: 重置計時器。StopTimer()
: 停止計時器并記錄時間。N
: 執(zhí)行基準測試的次數。
實戰(zhàn)案例
讓我們對一個計算斐波那契數的函數進行基準測試:
func Fib(n int) int { if n <= 1 { return n } return Fib(n-1) + Fib(n-2) } func BenchmarkFib(b *testing.B) { for i := 0; i < b.N; i++ { Fib(30) } }
登錄后復制
在終端中運行測試:
go test -bench=.
登錄后復制
輸出將如下所示:
BenchmarkFib 2767425 ns/op
登錄后復制
這意味著用 30 作為參數執(zhí)行 Fib
函數的基準測試需要大約 2,767,425 納秒(2767 毫秒)。
提示
使用 -benchmem
標志來測量基準測試的內存分配。
優(yōu)化基準測試代碼以避免開銷,例如創(chuàng)建不必要的變量。
多次運行基準測試以獲得更準確的結果。