Go语言基础语法之map|豆包MarsCode AI刷题

91 阅读4分钟

1.map 的定义

在 Go 语言中,map是一种无序的键 - 值对(key - value)数据结构。它的语法格式为map[KeyType]ValueType,其中KeyType表示键的类型,ValueType表示值的类型。例如,m := map[string]int{}定义了一个键为字符串类型,值为整数类型的空map。 键的类型必须是可以使用==运算符进行比较的类型,像数字、字符串、指针、数组(元素可比较)等都可以作为键的类型,但切片、函数等不能作为键的类型,因为它们不支持==比较操作。 初始化map

2.字面量初始化

可以使用字面量来初始化一个带有初始值的map。例如:m := map[string]int{"key1": 1, "key2": 2},这里定义了一个map,其中键"key1"对应的值是1,键"key2"对应的值是2。

3.使用make函数初始化

另一种常见的方式是使用make函数来初始化map。例如:m := make(map[string]int),这会创建一个空的map,键为字符串类型,值为整数类型。make函数还可以指定map的初始容量,如m := make(map[string]int, 100),这里指定了初始容量为100,不过这个容量只是一个提示,Go 语言的运行时会根据实际情况进行调整。

在后端入门AI练中学中有这么一段代码:

package main

import "fmt"

func main() {
	m := make(map[string]int)
	m["one"] = 1
	m["two"] = 2
	fmt.Println(m)           // map[one:1 two:2]
	fmt.Println(len(m))      // 2
	fmt.Println(m["one"])    // 1
	fmt.Println(m["unknow"]) // 0

	r, ok := m["unknow"]
	fmt.Println(r, ok) // 0 false

	delete(m, "one")

	m2 := map[string]int{"one": 1, "two": 2}
	var m3 = map[string]int{"one": 1, "two": 2}
	fmt.Println(m2, m3)
}

以下是对这段 Go 代码中map相关语法的详细分析:

  1. map的创建 m := make(map[string]int) 这里使用了make函数来创建一个map。make函数用于初始化内建的数据结构,如map、slice(切片)和channel(通道)。在这个例子中,创建的map其键的类型为string,值的类型为int。这是一种常见的初始化空map的方式,后续可以往这个map中添加键值对元素。
  2. 向map中添加元素 m["one"] = 1和m["two"] = 2 通过指定键("one"和"two")并赋予相应的值(1和2),向map中添加了两个键值对元素。如果键在map中不存在,这一操作相当于添加新元素;如果键已经存在,那么就会更新该键对应的值。
  3. 输出map及获取map的长度 fmt.Println(m) 直接输出map时,Go 语言会按照map[key:value key:value...]这样的格式来展示map中的键值对内容,在这个例子中输出为map[one:1 two:2],不过需要注意的是map的遍历顺序是不确定的,每次打印的顺序可能不一样。 fmt.Println(len(m)) 使用len函数可以获取map中键值对的数量,这里因为已经添加了两个键值对,所以输出为2。
  4. 访问map中的元素 fmt.Println(m["one"]) 通过指定键("one")来获取对应的值,由于"one"这个键存在于map中且对应的值为1,所以会输出1。 fmt.Println(m["unknow"]) 当访问一个不存在的键(如"unknow")时,Go 语言会返回该值类型的零值,因为这里值的类型是int,所以返回整数的零值0。
  5. 检测键是否存在并获取对应的值 r, ok := m["unknow"] 这是一种更安全的获取map中元素的方式,它返回两个值。第一个值r是对应键的值(如果键存在),第二个值ok是一个布尔值,表示键是否存在于map中。在这里因为"unknow"键不存在,所以r的值为0(int类型的零值),ok的值为false。
  6. 删除map中的元素 delete(m, "one") 使用delete函数可以从map中删除指定键对应的键值对。这里将键为"one"的元素从map m中删除了。
  7. 通过字面量初始化map并声明不同方式的map变量 m2 := map[string]int{"one": 1, "two": 2} 这是使用字面量的方式来初始化一个map,在定义变量的同时赋予了初始的键值对,语法简洁直观,直接列出了键和对应的值,创建了一个键为string类型、值为int类型且包含两个键值对的map。 var m3 = map[string]int{"one": 1, "two": 2} 这种方式先使用var关键字声明变量m3,然后通过map字面量来初始化它,效果和上面m2的初始化是一样的,最终m2和m3都是具有相同键值对的map,并且在代码最后输出它们时,格式同样是按照map[key:value key:value...]展示其内容。