Go 语言中,字典类型的官方称谓是 Map, 它是哈希表(Hash Table)的一个实现。跟 Java 中的 HashMap 非常的相似。
字典(哈希表)是一种使用频率极高的数据结构。作为无序键值对集合,字典要求 key 必须是支持相等运算符(==、!=)的数据类型,比如数字、字符串、指针、数组、结构体以及对应接口类型。
如果一个字典类型的键的类型为K,且元素的类型为T,那么用于表示这个字典类型的类型字面量:map[K]T
字典是引用类型,使用 make 函数或初始化表达语句来创建。
make 函数创建
package main
import "fmt"
func main() {
m := make(map[string]int)
m["onlineCount"] = 12
m["offlineCount"] = 10
fmt.Println(m) // map[offlineCount:10 onlineCount:12]
}
如上代码通过 make 函数创建了一个 key 为 string 类型,value 为 int 类型的字典。通过 m["key"] 的方式可以对字典访问或赋值。
初始化语句创建
package main
import "fmt"
func main() {
m2 := map[string]struct {
name string
age int
}{
"张": {"张三", 18},
"李": {"李四", 25},
}
fmt.Println(m2) // map[张:{张三 18} 李:{李四 25}]
}
如上代码通过初始化语句的方式创建了一个 key 为 string 类型,value 为匿名结构体类型的字典。
增、删、改
字典创建之后可以对字典内容进行修改。
package main
import "fmt"
func main() {
phoneCountMap := make(map[string]int)
fmt.Println(phoneCountMap) // map[]
// 增
phoneCountMap["nokia n95"] = 100
phoneCountMap["nokia n97"] = 22
phoneCountMap["iphone 12 pro"] = 88
fmt.Println(phoneCountMap) // map[iphone 12 pro:88 nokia n95:100 nokia n97:22]
// 改
phoneCountMap["nokia n95"] = 38
fmt.Println(phoneCountMap) // map[iphone 12 pro:88 nokia n95:38 nokia n97:22]
// 删
delete(phoneCountMap, "nokia n97")
fmt.Println(phoneCountMap) // map[iphone 12 pro:88 nokia n95:38]
}
对于删除字典中的键值对可以使用 delete(map, key) 函数。map 表示要删除的字典,key 表示要删除的键。