Performance is everything! Whether you're building a high-performance API or just curious if your function is slower than a snail, benchmarking in Go is your best friend. Let’s dive into Go’s built-in benchmarking tools!
Why Benchmark? (Because Nobody Likes Slow Code!)
- Measure execution time of your functions.
- Compare different implementations to find the fastest.
- Optimize performance before users start complaining!
Writing a Simple Benchmark (Speed Test 101)
Go’s testing
package makes benchmarking easy. Here’s a basic example:
package main
import "testing"
func Add(a, b int) int {
return a + b
}
func BenchmarkAdd(b *testing.B) {
for i := 0; i < b.N; i++ {
Add(100, 200)
}
}
Run your benchmark with:
go test -bench .
You’ll get an output like:
BenchmarkAdd-8 1000000000 0.317 ns/op
What does this mean? The function took 0.317
nanoseconds per operation!
Benchmarking Multiple Implementations (Speed Showdown!)
Ever wondered which version of your function is the fastest? Try this:
func SlowAdd(a, b int) int {
sum := 0
for i := 0; i < 1000; i++ {
sum = a + b
}
return sum
}
func BenchmarkSlowAdd(b *testing.B) {
for i := 0; i < b.N; i++ {
SlowAdd(100, 200)
}
}
Run benchmarks and compare the results!
Avoiding Benchmarking Pitfalls (Common Mistakes!)
- Don’t include unnecessary operations in the loop.
- Reset timers if setting up test data:
b.ResetTimer()
- Use
b.ReportAllocs()
to track memory usage.
Profiling (Going Deeper)
Want to dig deeper into performance? Use profiling:
go test -bench . -benchmem
This shows memory allocations and helps find memory leaks!
Benchmarking is a superpower for Go developers.
0 Comments