go map iteration uses memory allocation when we need a pointer of key/value, even within empty maps!
func BenchmarkMap(b *testing.B) {
var m map[byte]struct{}
var p *byte
for i := 0; i < b.N; i++ {
for k := range m {
p = &k
_ = p
}
}
}
$ go test -bench=Map -benchmem
BenchmarkMap-4 51860970 23.70 ns/op 1 B/op 1 allocs/op
$ #expected result:
BenchmarkMap-4 51860970 23.70 ns/op 0 B/op 0 allocs/op