初始化空切片的正确方式
var t []string
Declaring Empty Slices
Go Slices: usage and internals
The former declares a nil slice value, while the latter is non-nil but zero-length. They are functionally equivalent—their len and cap are both zero—but the nil slice is the preferred style.
To append to a slice, you don't have to allocate memory first: the nil slice is enough as a slice to add to.
func Benchmark(b *testing.B) {
for n := 0; n < b.N; n++ {
data := make([]int, 0)
for k := 0; k < 100; k++ {
data = append(data, k)
}
}
}
$ go test -bench=. -run=none
goos: linux
goarch: amd64
pkg: learn/benchmark
cpu: Intel(R) Core(TM) i5-6300HQ CPU @ 2.30GHz
Benchmark-4 1287214 955.1 ns/op
PASS
ok learn/benchmark 1.874s
$ go test -bench=. -run=none
goos: darwin
goarch: arm64
pkg: learn/basic/test
Benchmark-10 3759878 307.8 ns/op
PASS
ok learn/basic/test 1.955s
func Benchmark(b *testing.B) {
for n := 0; n < b.N; n++ {
var data []int
for k := 0; k < 100; k++ {
data = append(data, k)
}
}
}
$ go test -bench=. -run=none
goos: linux
goarch: amd64
pkg: learn/benchmark
cpu: Intel(R) Core(TM) i5-6300HQ CPU @ 2.30GHz
Benchmark-4 1203589 914.4 ns/op
PASS
ok learn/benchmark 1.701s
$ go test -bench=. -run=none
goos: darwin
goarch: arm64
pkg: learn/basic/test
Benchmark-10 3828596 306.5 ns/op
PASS
ok learn/basic/test 2.419s
func Benchmark(b *testing.B) {
for n := 0; n < b.N; n++ {
data := []int{}
for k := 0; k < 100; k++ {
data = append(data, k)
}
}
}
$ go test -bench=. -run=none
goos: darwin
goarch: arm64
pkg: learn/basic/test
Benchmark-10 3716502 310.1 ns/op
PASS
ok learn/basic/test 2.006s