【Duke】Map声明、元素访问及遍历 008 - PingPongGooo/GoFoundation GitHub Wiki

Map 声明

m := map[string]int{"one":1,"two":2,"three":3}
m1 := map[string]int{}
m1["one"] = 1

m2 := make(map[string]int,10) // 10 initial capacity
package _map

import "testing"

func TestInitMap(t *testing.T)  {
	m1 := map[int]int{1:1,2:4,3:9}
	t.Log(m1[2])
	t.Logf("len m1=%d",len(m1))
	m2:=map[int]int{}
	m2[4]=16
	t.Logf("len m2=%d",len(m2))

	m3:=make(map[int]int,10)
	t.Logf("len m3=%d",len(m3))
}
// key存在,他的默认值是 0 值 。 和真实的 0 值 冲突
func TestAccessNotExistingKey(t *testing.T)  {
	m1:=map[int]int{}
	t.Log(m1[1])

	m1[2]=0
	//m1[3]=0
	t.Log(m1[2])

	// key存在,他的默认值是 0 值  。 和真实的 0 值 冲突

	if v, ok := m1[3]; ok{
		t.Logf("key 3 is existing %d",v)
	}else {
		t.Log("key 3 is not existing")
	}
}

Map 元素的访问 与其他编程语言的差异

在访问的key不存在时,仍然会返回 0 值, 不能通过返回 nil 来判断元素是否存在

if v,ok:=m["four"]; ok {
   t.Log("four",v)
}else{
   t.Log("Not existing")
}

Map 遍历

m := map[string]int{"one";1,"two":2, "three":3}
for k,v := range m{
    t.Log(k,v)
}

func TestTravelMap(t *testing.T)  {
	m1 := map[int]int{1:1,2:4,3:9}
	for k,v := range m1 {
		t.Log(k,v)
	}
}