go 中的性能基準測試衡量函數效率,通過在以 benchmark 開頭的函數中編寫基準測試代碼實現。testing.b 類型提供 resettimer()、stoptimer() 和 n 屬性控制基準測試行為。例如,計算斐波那契數的函數基準測試表明執行 fib(30) 需要約 2,767,425 納秒。優化基準測試代碼以避免開銷,多次運行以獲得準確結果。
Go 函數測試中的性能基準測試
性能基準測試是衡量函數效率的重要工具。在 Go 中,testing 包提供了針對函數執行時間的基準測試功能。
編寫性能基準測試
編寫一個性能基準測試需要創建一個以 Benchmark 開頭的函數,后面跟上要測試的函數名:
func BenchmarkFib(b *testing.B) {
// 基準測試代碼
}
登錄后復制
使用 testing.B
testing.B 類型提供以下方法來控制基準測試:
ResetTimer(): 重置計時器。StopTimer(): 停止計時器并記錄時間。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 作為參數執行 Fib 函數的基準測試需要大約 2,767,425 納秒(2767 毫秒)。
提示
使用 -benchmem 標志來測量基準測試的內存分配。
優化基準測試代碼以避免開銷,例如創建不必要的變量。
多次運行基準測試以獲得更準確的結果。






