map初始化
一、初始化
对于空map
请使用make(..)
初始化,这样使得map
的初始化和声明有较大不同,例如:
//bad usage
var (
// m1 读写安全;
// m2 在写入时会 panic
m1 = map[T1]T2{}
m2 map[T1]T2
)
//good usage
var (
// m1 读写安全;
// m2 在写入时会 panic
m1 = make(map[T1]T2)
m2 map[T1]T2
)
另外,如果map
包含固定的元素列表,则使用map literals
初始化映射。
//bad usage
m := make(map[T1]T2, 3)
m[k1] = v1
m[k2] = v2
m[k3] = v3
//good usage
m := map[T1]T2{
k1: v1,
k2: v2,
k3: v3,
}
二、性能提升
在map
初始化时提供大致的容量大小信息。
make(map[T1]T2, hint)
为make()
提供容量信息尝试在初始化时调整map
大小,这减少了在将元素添加到map
时增长和分配的开销。**注意,map
不能保证分配hint
个容量。因此,即使提供了容量,添加元素仍然可以进行分配。
//bad usage
m := make(map[string]os.FileInfo)
files, _ := ioutil.ReadDir("./files")
for _, f := range files {
m[f.Name()] = f
}
//good usage
files, _ := ioutil.ReadDir("./files")
m := make(map[string]os.FileInfo, len(files))
for _, f := range files {
m[f.Name()] = f
}
Last updated
Was this helpful?