go-doc-经验

slice 和 bytes.buffer

buffer对slice进行2次封装,单纯的slice比buffer性能要好

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
func BenchmarkSlice(b *testing.B) {
s := make([]byte, 0, 64)
for i := 0; i < b.N; i++ {
// ....
s = append(s, aUtils.Uint32_Bytes(100) ...)
}
}

func BenchmarkBuffer(b *testing.B) {
s := make([]byte, 0, 64)
buf := bytes.NewBuffer(s)
for i := 0; i < b.N; i++ {
// ....
buf.Write(aUtils.Uint32_Bytes(100))
}
}

BenchmarkSlice-12 112463062 11.6 ns/op
BenchmarkSlice-12 148377950 8.11 ns/op
BenchmarkSlice-12 148377895 8.14 ns/op
BenchmarkSlice-12 147829038 8.13 ns/op
BenchmarkSlice-12 148377784 8.14 ns/op
BenchmarkBuffer-12 121100317 9.82 ns/op
BenchmarkBuffer-12 120003360 9.74 ns/op
BenchmarkBuffer-12 100000000 10.0 ns/op
BenchmarkBuffer-12 121222455 9.83 ns/op
BenchmarkBuffer-12 120027868 9.82 ns/op