Converting a small integer value into an interface value no longer causes allocation.
意思是说,将小整数转换为接口值不再需要进行内存分配。小整数是指 0 到 255 之间的数。
我们实际简单测试一下。
创建一个包 smallint,在包中创建文件 smallint.go,加上如下代码:
1 2 3 4 5 6 7 8 9 10
package smallint
funcConvert(val int) []interface{} { var slice = make([]interface{}, 100) for i := 0; i < 100; i++ { slice[i] = val }
return slice }
为了更好的看到效果,函数中进行了 100 次 int 到 interface 的转换。写个基准测试 smallint_test.go:
1 2 3 4 5 6 7 8 9 10 11 12 13
package smallint_test
import ( "testing" "test/smallint" )
funcBenchmarkConvert(b *testing.B) { for i := 0; i < b.N; i++ { result := smallint.Convert(12) _ = result } }
分别使用 Go1.14 和 Go1.15 版本进行测试:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
$ go version go version go1.14.7 darwin/amd64 $ go test -bench . -benchmem ./... goos: darwin goarch: amd64 pkg: test/smallint BenchmarkConvert-8 569830 1966 ns/op 2592 B/op 101 allocs/op PASS ok test/smallint 1.647s $ go version go version go1.15 darwin/amd64 $ go test -bench . -benchmem ./... goos: darwin goarch: amd64 pkg: test/smallint BenchmarkConvert-8 1859451 655 ns/op 1792 B/op 1 allocs/op PASS ok test/smallint 2.178s