#私藏项目实操分享# 1000字带你学会 Go maps

简介: #私藏项目实操分享# 1000字带你学会 Go maps

Go maps

Go maps 类似于其他编程语言的哈希表,在 Python 中称为字典,Ruby 为散列,而 JavaScript 则被称为对象,PHP 是关联数组。

不像数组和切片,maps 的主要优点是它们可以使用任何数据类型作为索引,在这种情况下称为映射键或 key。

尽管 Go maps 不排除任何数据类型作为键,但要用作的数据类型必须具有 可比性,这意味着 Go 编译器必须能够区分一个键和另一个键,或者简单地说 ,映射的键必须支持 == 运算符。

创建 maps

你可以创建一个空 map,并用 string 作为键,int 作为值,在 go 中可以用 make() 函数创建:

myMap = make(map[string] int)

或者指定一个 预先分配的空间,就像分配切片的容量一样:

myMap := make(map[int]string, 18)

这里的 string 就是键类型, int 就是值的类型,我们也可以按如下方式创建:

myMap := make(map[string]int)
myMap["小王"] = 17
myMap["小李"] = 19
myMap["老王"] = 51

也可以通过 map 关键字来创建一个 map:

myClass := map[string]int {
    "小王": 17,
    "小李": 19,
    "老张": 51,
}

maps 取值

然后我们可以通过 myClass["小王"]myClass["老张"] 来取值,将会分别得到 17 和 51 的结果。

如果程序中访问的键并不存在于 myClass 中,那么 Go 将会根据值的类型返回相应的零值作为结果,比如 myClass["张三"] 就会返回结果为“0”。

Tips: 正因为,当我们想尝试获取maps中不存在的键的值,最终会得到零,导致我们无法确定结果实际上是0,还是因为没有这个值导致的值为0。所以在Go语言中有 _, ok 的用法。

这个 ok 也不是必须这样命名,可以设置为其他非关键字 命名法,比如 age, found := myClass["张三"]

删除 maps

可以通过 delete() 函数来删除一个 map 的元素,比如删除班级中的小李:

delete(myClass, "小李")

 

maps 迭代

for key, value := range myClass {
    fmt.Println(key, value)
}

代码演示

创建一个 myMaps.go 文件,

package main
import (
    "fmt"
)
func main() {
    myMap := make(map[string]int)
    myMap["小王"] = 17
    myMap["小李"] = 19
    myMap["老王"] = 51
    fmt.Println("myMap:", myMap)
    myClass := map[string]int{
        "小王": 17,
        "小李": 19,
        "老张": 51,
    }
    fmt.Println("myClass:", myClass)
    delete(myClass, "小李")
    fmt.Println("myClass:", myClass)
    for key, value := range myClass {
        fmt.Println(key, value)
    }
    fmt.Println("myClass[\"张三\"]:", myClass["张三"])
    _, ok := myClass["张三"]
    if ok {
        fmt.Println("张三存在~")
    } else {
        fmt.Println("张三不存在!")
    }
}

当我们执行上述代码时,将会得到如下结果:

myMap: map[小李:19 小王:17 老王:51]
myClass: map[小李:19 小王:17 老张:51]
myClass: map[小王:17 老张:51]
小王 17
老张 51
myClass["张三"]: 0
张三不存在!

总结

maps  比切片和数组更通用,但这种灵活性是有代价的:实现 Go maps 所需的额外的空间。 但是,内置的 Go  在算法上实现的这种结构非常快,所以在需要时不要犹豫使用 Go maps。 Go maps  非常方便,可以存储多种不同类型的数据,尤其当我们需要追求查询速度的时候,就该想到maps,同时易于理解且易于使用。

 

目录
打赏
0
0
0
0
6
分享
相关文章
|
10月前
|
Go 语言之 Maps 详解:创建、遍历、操作和注意事项
Maps用于以键值对的形式存储数据值。Maps中的每个元素都是一个键值对。Maps是一个无序且可更改的集合,不允许重复。Maps的长度是其元素的数量。您可以使用 len() 函数来查找长度。Maps的默认值是 nil。Maps保存对底层哈希表的引用。
103 0
Go 1.21.0 新增标准库 slices 和 maps 详解
Go 1.21.0 新增标准库 slices 和 maps 详解
147 0
深入探索 Go 1.21.0 中的 maps 工具库
本文对 Go 工具库 maps 进行详细介绍,包括其提供的函数 Clone、Copy、DeleteFunc、Equal 和 EqualFunc,并强调了使用这些函数时需要注意的地方。
194 1
#私藏项目实操分享# Go 语言入门很简单 -- 2. Go 的数据类型
#私藏项目实操分享# Go 语言入门很简单 -- 2. Go 的数据类型
111 0
Go 语言入门很简单 -- 8. Go Maps #私藏项目实操分享#
Go 语言入门很简单 -- 8. Go Maps #私藏项目实操分享#
155 0
Go 语言入门很简单 -- 8. Go Maps #私藏项目实操分享#
监控局域网其他电脑:Go 语言迪杰斯特拉算法的高效应用
在信息化时代,监控局域网成为网络管理与安全防护的关键需求。本文探讨了迪杰斯特拉(Dijkstra)算法在监控局域网中的应用,通过计算最短路径优化数据传输和故障检测。文中提供了使用Go语言实现的代码例程,展示了如何高效地进行网络监控,确保局域网的稳定运行和数据安全。迪杰斯特拉算法能减少传输延迟和带宽消耗,及时发现并处理网络故障,适用于复杂网络环境下的管理和维护。
揭秘 Go 语言中空结构体的强大用法
Go 语言中的空结构体 `struct{}` 不包含任何字段,不占用内存空间。它在实际编程中有多种典型用法:1) 结合 map 实现集合(set)类型;2) 与 channel 搭配用于信号通知;3) 申请超大容量的 Slice 和 Array 以节省内存;4) 作为接口实现时明确表示不关注值。此外,需要注意的是,空结构体作为字段时可能会因内存对齐原因占用额外空间。建议将空结构体放在外层结构体的第一个字段以优化内存使用。
Go 语言中的 Sync.Map 详解:并发安全的 Map 实现
`sync.Map` 是 Go 语言中用于并发安全操作的 Map 实现,适用于读多写少的场景。它通过两个底层 Map(`read` 和 `dirty`)实现读写分离,提供高效的读性能。主要方法包括 `Store`、`Load`、`Delete` 等。在大量写入时性能可能下降,需谨慎选择使用场景。
|
11天前
|
企业监控软件中 Go 语言哈希表算法的应用研究与分析
在数字化时代,企业监控软件对企业的稳定运营至关重要。哈希表(散列表)作为高效的数据结构,广泛应用于企业监控中,如设备状态管理、数据分类和缓存机制。Go 语言中的 map 实现了哈希表,能快速处理海量监控数据,确保实时准确反映设备状态,提升系统性能,助力企业实现智能化管理。
27 3

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等