What I do
- focus on performance and allocations
When to use me
Use this when you are creating or modifying code in the hot path.
Quick start
Benchmarks
Write benchmarks alongside any performance-sensitive change. Use benchstat
with -count 20 to compare. Always report sec/op, B/op, and allocs/op.
Target zero allocations in hot-path code.
func BenchmarkMyPredicate(b *testing.B) {
p := &predicate{...}
req := httptest.NewRequest("GET", "/", nil)
req.Header.Set("Authorization", "Bearer "+testToken)
b.ReportAllocs()
b.ResetTimer()
for b.Loop() {
p.Match(req)
}
}
Example run:
% go test -bench=BenchmarkMyPredicate -benchmem -run='^$' -count 20 -cpu 1,2,4,8,16 ./predicates/mypredicate > old.txt
# ..edit code..
% go test -bench=BenchmarkMyPredicate -benchmem -run='^$' -count 20 -cpu 1,2,4,8,16 ./predicates/mypredicate > new.txt
% benchstat old.txt new.txt
Show the output of benchstat to the developer.