关于go:Go-基础篇之-Map

3次阅读

共计 2045 个字符,预计需要花费 6 分钟才能阅读完成。

Go 语言是一门十分风行的开源编程语言,它的语法简略易学,同时也具备杰出的性能体现。其中,Map 是 Go 语言中的一种数据结构,它能够用来存储键值对。明天咱们来聊聊 Map,我将介绍一些对于 Go 语言中 Map 的基本知识和高级用法。

1. Map 基础知识

1.1 什么是 Map

在 Go 语言中,Map 是一种无序的键值对数据结构。它相似于 Python 中的字典,C++ 中的 Map,Java 中的 HashMap 等。Map 中的每个元素都蕴含一个键和一个值。键必须是惟一的,而值则能够反复。

1.2 申明一个 Map

在 Go 语言中,能够应用 make 函数来创立一个 Map。make 函数须要传递两个参数,第一个参数是 Map 的类型,第二个参数是 Map 的初始大小。Map 的类型能够应用 Map 关键字来定义,例如:

// 创立一个类型为 map[string]int 的 map,初始大小为 10
m := make(map[string]int, 10)

上述代码将创立一个类型为 Map[string]int 的 Map,其中键为字符串类型,值为整数类型。初始大小为 10,这个值能够依据理论须要进行调整。

1.3 增加元素到 Map 中

能够应用赋值操作符来向 Map 中增加元素。例如:

// 向 map 中增加元素
m["one"] = 1
m["two"] = 2

上述代码将向 Map 中增加两个元素,键为 ”one” 和 “two”,值别离为 1 和 2。

1.4 Map 中获取元素

能够应用下标操作符来从 Map 中获取元素。例如:

// 从 map 中获取元素
fmt.Println(m["one"])
fmt.Println(m["two"])

上述代码将输入 Map 中键为 “one” 和 “two” 的值。

须要留神的是,如果 Map 中不存在指定的键,则会返回该值类型的零值。因而,在获取 Map 中的元素之前,须要先判断该元素是否存在。

1.5 遍历 Map

能够应用 for 循环来遍历 Map 中的所有元素。在每次循环中,将会返回以后元素的键和值。例如:

// 遍历 map 中的元素
for key, value := range m {fmt.Println(key, value)
}

上述代码将输入 Map 中所有元素的键和值。

2. Map 高级用法

在 Go 语言中,Map 是一种十分重要的数据结构,它能够让咱们疾速地存储和检索数据。除了基本操作之外,Map 还具备一些高级用法,本文将介绍这些高级用法。

2.1 Map 的零值

在 Go 语言中,如果咱们申明一个 Map 却没有给它赋值,那么它的值将是 nil。然而,在应用 Map 前,咱们应该将它初始化,免得出现意外谬误。能够应用 make() 函数来初始化 Map。例如:

m := make(map[string]int)

这里,咱们创立了一个名为 m 的 Map,它的键是字符串类型,值是整型。

2.2 Map 的长度

咱们能够应用 len() 函数获取 Map 的长度,即其中元素的数量。例如:

m := make(map[string]int)
m["foo"] = 42
m["bar"] = 13
fmt.Println(len(m))

这将输入 2,因为 m 中有两个元素。

2.3 Map 的删除

咱们能够应用 delete() 函数从 Map 中删除元素。delete() 函数承受两个参数:要删除元素的 Map 和要删除元素的键。例如:

m := make(map[string]int)
m["foo"] = 42
delete(m, "foo")

这将从 Map 中删除名为 “foo” 的键。

2.4 Map 的并发安全性

在多个 Goroutine 中应用 Map 时,咱们须要留神 Map 的并发安全性。多个 Goroutine 对同一个 Map 进行读写操作时,可能会导致竞争条件和数据竞争等问题。为了解决这些问题,Go 语言提供了 sync 包中的 Map 类型。sync.Map 类型能够平安地在多个 Goroutine 中应用。例如:

var m sync.Map
m.Store("foo", 42)
value, ok := m.Load("foo")

这里,咱们应用 sync.Map 类型创立了名为 m 的 Map,向其中增加了一个名为 “foo” 的键,值为 42。而后,咱们应用 Load() 办法从 Map 中读取 “foo” 键的值。

2.5 Map 的值为函数

在 Map 中,值能够是函数。这种用法十分实用,能够让咱们更加灵便地编写代码。例如,咱们能够应用 Map 来存储不同的操作,而后依据须要调用这些操作:

var operations = map[string]func(int, int) int {"add": func(a, b int) int {return a + b},
    "sub": func(a, b int) int {return a - b},
    "mul": func(a, b int) int {return a * b},
}

result := operations["add"](3, 4)

这里,咱们创立了一个 Map,它的键是字符串,值是函数类型。而后,咱们能够应用这些函数来执行不同的操作,如计算加法、减法、乘法等。

3. 总结

在本文中,咱们学习了 Map 的基础知识和高级用法,包含 Map 定义的 零值、Map 的长度和 sync.Map。

欢送点赞关注,感激!

正文完
 0