Golang中的map

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

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

map是引用类型的。

map的语法格式

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

1
2
3
4
/*声明变量,默认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:值的数据类型

实例

下面声明一个保存个人信息的map

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
package main

import "fmt"

func map_variable() {
//类型的声明
var m1 map[string]string
m1 = make(map[string]string)
fmt.Printf("m1: %v\n", m1)
fmt.Printf("m1: %T\n", m1)
//直接在声明变量的时候赋初值
//这种就是比较固定的形式
var m2 = map[string]string{"name": "weiyunfeng", "age": "23", "email": "[email protected]"}
fmt.Printf("m2: %v\n", m2)
fmt.Printf("m2: %T\n", m2)
//这边输出的结果是m2: map[age:23 email:[email protected] name:weiyunfeng]
//所以要注意map是无序的

//先声明变量,然后用make动态的赋初值
var m3 map[string]string
m3 = make(map[string]string)
m3["name"] = "weiyunfeng"
m3["age"] = "23"
m3["email"] = "[email protected]"
fmt.Printf("m3: %v\n", m3)
fmt.Printf("m3: %T\n", m3)
}
func main() {
map_variable()
}

运行结果

1
2
3
4
5
6
m1: map[]
m1: map[string]string
m2: map[age:23 email:905577137@qq.com name:weiyunfeng]
m2: map[string]string
m3: map[age:23 email:905577137@qq.com name:weiyunfeng]
m3: map[string]string

访问map

由于map有无序的特性,所以key就是它的唯一性标识

可以通过下标key获得其值,例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
package main

import "fmt"

func key_map_variable() {
var m1 = map[string]string{"name": "weiyunfeng", "age": "23", "email": "[email protected]"}
var key = "name"
var value = m1[key]
fmt.Printf("value: %v\n", value)
}

func main() {
key_map_variable()
}

运行结果

1
value: weiyunfeng

判断某个键是否存在

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

1
value, ok :=map[key]

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

实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package main

import "fmt"

func ok_map_variable() {
var m1 = map[string]string{"name": "weiyunfeng", "age": "23", "email": "[email protected]"}
var k1 = "name"
var k2 = "sex"
v, ok := m1[k1]
fmt.Printf("v: %v\n", v)
fmt.Printf("ok: %v\n", ok)
v, ok = m1[k2]
fmt.Printf("v: %v\n", v)
fmt.Printf("ok: %v\n", ok)
}
func main() {
ok_map_variable()
}

运行结果

1
2
3
4
v: weiyunfeng
ok: true
v:
ok: false