44 lines
799 B
Go
44 lines
799 B
Go
package main
|
|
|
|
import "testing"
|
|
|
|
// go test -bench=. -benchmem comparison_test.go
|
|
|
|
const bufferSize = 10
|
|
|
|
type ReaderWithSliceArgument struct{}
|
|
|
|
func (r ReaderWithSliceArgument) Read(p []byte) (int, error) {
|
|
for i := 0; i < bufferSize; i++ {
|
|
p[i] = byte(i)
|
|
}
|
|
|
|
return bufferSize, nil
|
|
}
|
|
|
|
type ReaderWithSliceReturn struct{}
|
|
|
|
func (r ReaderWithSliceReturn) Read(n int) ([]byte, error) {
|
|
p := make([]byte, n)
|
|
for i := 0; i < n; i++ {
|
|
p[i] = byte(i)
|
|
}
|
|
|
|
return p, nil
|
|
}
|
|
|
|
func BenchmarkSliceWithArgument(b *testing.B) {
|
|
for i := 0; i < b.N; i++ {
|
|
p := make([]byte, bufferSize)
|
|
reader := ReaderWithSliceArgument{}
|
|
_, _ = reader.Read(p)
|
|
}
|
|
}
|
|
|
|
func BenchmarkSliceWithReturn(b *testing.B) {
|
|
for i := 0; i < b.N; i++ {
|
|
reader := ReaderWithSliceReturn{}
|
|
_, _ = reader.Read(bufferSize)
|
|
}
|
|
}
|