一架梯子,一头程序猿,仰望星空!

go语言map类型


go语言支持map类型,map类型是一种键值(key/value)存储的哈希数据结构,读写数据都是通过key进行操作。

1.定义map类型

map类型语法:

var m map[key类型]value类型

定义一个map类型变量,需要指定map的key是什么数据类型,value(值)是什么数据类型。

例子:

// key是字符串类型,value是int类型
var m map[string]int

// key是字符串类型,value是string类型
var m2 map[string]string

// key是字符串类型,value是User结构体类型
var m3 map[string]User

2.初始化map

没有初始化的map变量,默认值是nil,需要通过make初始化map类型变量。

语法:

make(map[key类型]value类型)

例子:

// 定义一个map
var m map[string]int

// 初始化map
m = make(map[string]int)

通过短变量声明符,可以快速定义和初始化一个map

// 不需要预先定义变量m的类型,直接通过短变量声明符(:=),直接定义和初始化变量
m := make(map[string]string)

主要:map必须要先初始化才能使用。

3.读写数据

读写数据的操作方式,类似数组,通过 [] 符号引用key的值。

语法:

m[key]

key是什么类型的数据,就传入什么类型的值,例如: string类型的key, 写法为m["key"], int类型的key, 写法为m[123] 。

例子:

package main

import "fmt"

func main() {
    // 定义并初始化map
    m := make(map[string]int)

    // 保存一个键值对,将key = tizi的值设置为100
    m["tizi"] = 100

    // 读取key = tizi 的值, 这里得到的值是100
    v := m["tizi"]

    fmt.Println(v)
}

4.判断key是否存在

语法:

elem, ok = m[key]

第一个返回值elem是key的值,第二个返回值ok表示key是否存在。

例子:

package main

import "fmt"

func main() {
	// 定义并初始化map
	m := make(map[string]string)

	m["tizi"] = "https://www.tizi365.com"
	
	v, ok := m["tizi"]
        // 判断key是否存在
	if ok {
		fmt.Println("key存在, 值等于", v)
	} else {
		fmt.Print("key不存在!")
	}
}

输出:

key存在, 值等于 https://www.tizi365.com

5.删除数据

语法:

delete(m, key)

删除map中的指定key的数据

例子:

package main

import "fmt"

func main() {
	// 定义并初始化map
	m := make(map[string]string)

	m["tizi"] = "https://www.tizi365.com"
        fmt.Println(m)

        // 删除key=tizi的数据
	delete(m, "tizi")
	fmt.Println(m)
}

输出:

map[tizi:https://www.tizi365.com]
map[]