使用int key
使用整数key比使用字符串key要快,这个很正常。makemap
函数会检查key和value的长度,默认长度是128字节,也就是说小于或者等于128字节它会把数据直接拷贝到字典里面去,如果是整数的话整个key都在字典中,如果字符串只有两个数据结构指针和长度在字典中,指针还指向另外一个数组。很显然读取key的时候分成两步,先在字典里面读取字符串头信息再读取字符串的内容。比起int直接读出来性能肯定有差异的。
所以某些时候不需要用字符串当作key,因为很多数据的key不见得是字符串,比如有一个全局的序号生成器,未必是自增的,但需要保持全局有唯一的id,用id做key,访问效率要高很多。
var (
intKeys []int
strKeys []string
m1 map[int]struct{}
m2 map[string]struct{}
)
func init() {
for i := 0; i < 100000; i++ {
intKeys = append(intKeys, i)
strKeys = append(strKeys, strconv.Itoa(i))
}
m1 = make(map[int]struct{})
m2 = make(map[string]struct{})
}
func testI