Skip to content

1.golang map

map是一种key:value键值对的数据结构容器。map内部实现是哈希表(hash).

map最重要的一点是通过key来快速检索数据,key类似于索引,指向数据的值。

map是引用类型的。

1.1map的语法格式

可以使用内建函数make也可以使用map关键字来定义map

go
/* 声明变量,默认map是nil */
var map_variable map[key_data_type]value_data_type

/* 使用make 函数 */
map_variable = make(map[key_data_type]value_data_type)
/* 声明变量,默认map是nil */
var map_variable map[key_data_type]value_data_type

/* 使用make 函数 */
map_variable = make(map[key_data_type]value_data_type)

map_variable:map变量名称

key_data_type:key的数据类型

value_data_type:值的数据类型

初始化

go
func mapsFunc() {
	//类型声明
	var m1 map[string]string
	m1 = make(map[string]string)
	fmt.Printf("m1: %v\n", m1)
	fmt.Printf("m1: %T\n", m1)

	println("---------初始化1---------")
	var m2 = map[string]string{"name": "tom", "age": "20", "email": "xx@163.com"}
	//map 打印是无序的
	fmt.Printf("m2: %v\n", m2)

	println("---------初始化2---------")
	m3 := make(map[string]string)
	m3["name"] = "tom"
	m3["age"] = "20"
	m3["email"] = "xx@163.com"
	fmt.Printf("m3: %v\n", m3)
}
func mapsFunc() {
	//类型声明
	var m1 map[string]string
	m1 = make(map[string]string)
	fmt.Printf("m1: %v\n", m1)
	fmt.Printf("m1: %T\n", m1)

	println("---------初始化1---------")
	var m2 = map[string]string{"name": "tom", "age": "20", "email": "xx@163.com"}
	//map 打印是无序的
	fmt.Printf("m2: %v\n", m2)

	println("---------初始化2---------")
	m3 := make(map[string]string)
	m3["name"] = "tom"
	m3["age"] = "20"
	m3["email"] = "xx@163.com"
	fmt.Printf("m3: %v\n", m3)
}

访问

go
func mapAccessFunc() {
	var m2 = map[string]string{"name": "tom", "age": "20", "email": "xx@163.com"}
	var key = "name"
	var value = m2[key]
	fmt.Printf("value: %v\n", value)
}
func mapAccessFunc() {
	var m2 = map[string]string{"name": "tom", "age": "20", "email": "xx@163.com"}
	var key = "name"
	var value = m2[key]
	fmt.Printf("value: %v\n", value)
}

键位是否存在

go语言中有个判断map中键是否存在的特殊写法,格式如下:

go
value,ok:=map[key]
value,ok:=map[key]

如果ok为true,存在,否则,不存在

go
func keyExitFunc() {
	var m2 = map[string]string{"name": "tom", "age": "20", "email": "xx@163.com"}
	var k1 = "name"
	var k2 = "name1"
	v, ok := m2[k1]
	fmt.Printf("v: %v\n", v)
	println("-----")
	v, ok = m2[k2]
	fmt.Printf("v: %v\n", v)
	fmt.Printf("ok: %v\n", ok)

}
func keyExitFunc() {
	var m2 = map[string]string{"name": "tom", "age": "20", "email": "xx@163.com"}
	var k1 = "name"
	var k2 = "name1"
	v, ok := m2[k1]
	fmt.Printf("v: %v\n", v)
	println("-----")
	v, ok = m2[k2]
	fmt.Printf("v: %v\n", v)
	fmt.Printf("ok: %v\n", ok)

}

2.map遍历

可以使用for range循环进行map遍历,得到key和value值。

2.1遍历key

go
func mapSearchFunc() {
	var m2 = map[string]string{"name": "tom", "age": "20", "email": "xx@163.com"}
	for key := range m2 {
		fmt.Printf("key: %v\n", key)
	}
}
func mapSearchFunc() {
	var m2 = map[string]string{"name": "tom", "age": "20", "email": "xx@163.com"}
	for key := range m2 {
		fmt.Printf("key: %v\n", key)
	}
}

2.2遍历key和value

go
func mapSearchFunc() {
	println("------------key-value")
	for key, value := range m2 {
		fmt.Printf("%v:%v\n", key, value)
	}
}
func mapSearchFunc() {
	println("------------key-value")
	for key, value := range m2 {
		fmt.Printf("%v:%v\n", key, value)
	}
}