初始化空切片的正确方式

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
posted @ 2022-03-08 11:11  doNotTellU  阅读(51)  评论(0编辑  收藏  举报