main_test.go:
package main
import "testing"
func BenchmarkMap(b *testing.B) {
m := map[int]int{0: 0, 1: 2, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 2, 9: 9, 10: 10}
for i := 0; i < b.N; i++ {
_ = m[10]
}
}
func BenchmarkSlice(b *testing.B) {
m := []int{0: 0, 1: 2, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 2, 9: 9, 10: 10}
for i := 0; i < b.N; i++ {
_ = m[10]
}
}
func BenchmarkSwitch(b *testing.B) {
m := func(i int) int {
switch i {
case 0:
return 0
case 1:
return 1
case 2:
return 2
case 3:
return 3
case 4:
return 4
case 5:
return 5
case 6:
return 6
case 7:
return 7
case 8:
return 8
case 9:
return 9
case 10:
return 10
}
return 0
}
for i := 0; i < b.N; i++ {
_ = m(10)
}
}
运行 go test -bench=".":
goos: linux
goarch: amd64
BenchmarkMap-4 50000000 27.7 ns/op
BenchmarkSlice-4 2000000000 0.65 ns/op
BenchmarkSwitch-4 2000000000 0.97 ns/op
PASS
ok _/var/www 4.824s
切片的性能是最优的,某些场景下,switch,map都可以转换到切片,性能更优