无聊做了一个GO语言的map,slice,switch的性能比较

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都可以转换到切片,性能更优

猜你喜欢

转载自my.oschina.net/pokdars/blog/1797191