映射是无序集合,无序的原因是映射的实现使用来散列表
- 声明
func TestMap(t *testing.T){
var m map[int]string
//m[0] = "hello" //assignment to entry in nil map
t.Log(m,reflect.TypeOf(m))
}
//result : map[] map[int]string
func TestMap(t *testing.T){
m := map[int]string{1:"hello"}
t.Log(m,reflect.TypeOf(m))
}
//result: map[1:hello] map[int]string
func TestMap(t *testing.T){
m := make(map[int]string)
m[2] = "hello"
t.Log(m,reflect.TypeOf(m))
}
//result: map[2:hello] map[int]string
- 空映射与nil映射
func TestMap(t *testing.T){
var m map[int]string
m1 := map[int]string{}
m2 := make(map[int]string)
t.Log(m,reflect.TypeOf(m))
t.Log(m1,reflect.TypeOf(m1))
t.Log(m2,reflect.TypeOf(m2))
}
//m1 ,m2 空映射 允许赋值
//m => nil 映射 赋值出错
映射是引用类型
在函数间传递映射并不会制造一个副本。在函数内对映射做来修改,所有对映射的引用都会察觉这个修改map实现工厂模式
map实现set
sync.Map
Go语言中的 map 在并发情况下,只读是线程安全的,同时读写是线程不安全的