慢聊Go之Go中的Map|Go主题月

简介: 慢聊Go之Go中的Map|Go主题月

前言

如果说在学习Java时,最重要的一种数据结构是什么?个人觉得必然会是集合。集合在Java中举足轻重。那么,我们已经熟知了Java中的Map结构,嘿嘿,其实在Go的世界里,仍然存在Map这个数据结构。

今天,我们就来好好学学,了解下呀!

什么是Map

Map是最有用的数据结构之一。它可以存储在键值对中,并且不允许重复的键。

映射是键值对存储容器。提供了快速有效的查找,并且呢,不允许重复的键,而可以有重复的值。

GoLang中声明Map结构

现在,我们来学下Go中如何声明一个Map结构

package main
import (
    "fmt"
)
func main() {
    var names map[int]string    // name map has int keys and string values
}

在我们的示例中,键的类型为Int,而值得类型为字符串。

初始化Map

走起,我们来学学如何初始化一个Map结构体。

使用Make()函数

函数make()可以用于初始化地图,如下所示:

package main
import (
    "fmt"
)
func main() {
    var names = make(map[int]string)
    names[0] = "John"
    names[1] = "Jane"
    fmt.Println(names)  // map[0:John 1:Jane]
}
使用语法
package main
import (
    "fmt"
)
func main() {
    var names = map[int]string {
        0: "John",
        1: "Jane",   // last comma is a must
    }
    fmt.Println(names)  // prints map[0:John 1:Jane]
}

在GoLang中使用地图

我们可以如同在Java中操作Map结构一样,在Go中,可以在Map插入、删除、查找key。

在地图中插入key

目前,两种方式插入key。初始化时插入key或使用索引语法进行初始化。

package main
import (
    "fmt"
)
func main() {
    var names = make(map[int]string)
    names[0] = "Freddy"    // indexed insertion
    names[1] = "Shawn"
    fmt.Println(names)  // prints map[0:Freddy 1:Shawn]
}

在地图中获取值

我们可以使用索引符号从映射中获取与key相关联的值,如下所示:

package main
import (
    "fmt"
)
func main() {
    var names = make(map[int]string)
    names[0] = "Freddy"    // indexed insertion
    names[1] = "Shawn"
    fmt.Println(names[1])  // prints Shawn
}
检查key是否存在

当我们尝试获取一个值时,我们得到一个布尔值。这有助于检查key是否存在。

package main
import (
    "fmt"
)
func main() {
    var names = make(map[int]string)
    names[0] = "Freddy"    // indexed insertion
    names[1] = "Shawn"
    fred, exists := names[0]
    if(exists) {
        fmt.Printf("%s exists", fred)  // prints "Freddy exists"
    }   
}
Map删除key

我们使用删除功能从Map中删除key。

package main
import (
    "fmt"
)
func main() {
    var names = make(map[int]string)
    names[0] = "Freddy"    // indexed insertion
    names[1] = "Shawn"
    names[2] = "Batman"
    // delete shawn
    delete(names, 1) 
    fmt.Println(names)     // prints map[0:Freddy 2:Batman]
}
遍历Map

使用范围,我们可以遍历Map,并同时获得Key和Value

package main
import (
    "fmt"
)
func main() {
    var names = make(map[int]string)
    names[0] = "Freddy"    // indexed insertion
    names[1] = "Shawn"
    names[2] = "Batman"
    names[3] = "Spiderman"
    names[4] = "Joker"
    for _, name := range names {
        fmt.Println(name)
    }
    // prints: 
        // Joker
        // Freddy
        // Shawn
        // Batman
        // Spiderman
}

总结

我们从简单来,到简单去,了解Map的相关操作。

走起来了。。。学习。

目录
相关文章
|
4月前
|
Go
go语言中遍历映射(map)
go语言中遍历映射(map)
122 8
|
18天前
|
存储 缓存 安全
Go 语言中的 Sync.Map 详解:并发安全的 Map 实现
`sync.Map` 是 Go 语言中用于并发安全操作的 Map 实现,适用于读多写少的场景。它通过两个底层 Map(`read` 和 `dirty`)实现读写分离,提供高效的读性能。主要方法包括 `Store`、`Load`、`Delete` 等。在大量写入时性能可能下降,需谨慎选择使用场景。
|
2月前
|
存储 安全 Go
Go语言中的map数据结构是如何实现的?
Go 语言中的 `map` 是基于哈希表实现的键值对数据结构,支持快速查找、插入和删除操作。其原理涉及哈希函数、桶(Bucket)、动态扩容和哈希冲突处理等关键机制,平均时间复杂度为 O(1)。为了确保线程安全,Go 提供了 `sync.Map` 类型,通过分段锁实现并发访问的安全性。示例代码展示了如何使用自定义结构体和切片模拟 `map` 功能,以及如何使用 `sync.Map` 进行线程安全的操作。
|
3月前
|
Go
go语言for遍历映射(map)
go语言for遍历映射(map)
95 12
|
4月前
|
存储 Go
go语言 遍历映射(map)
go语言 遍历映射(map)
64 2
|
6月前
|
Go 定位技术 索引
Go 语言Map(集合) | 19
Go 语言Map(集合) | 19
|
7月前
|
存储 缓存 Go
如何检查 Go map 是否包含某个键?
【8月更文挑战第31天】
103 0
|
7月前
|
存储 Go 容器
Go从入门到放弃之map(字典)
Go从入门到放弃之map(字典)
|
6月前
|
存储 前端开发 API
ES6的Set和Map你都知道吗?一文了解集合和字典在前端中的应用
该文章详细介绍了ES6中Set和Map数据结构的特性和使用方法,并探讨了它们在前端开发中的具体应用,包括如何利用这些数据结构来解决常见的编程问题。
ES6的Set和Map你都知道吗?一文了解集合和字典在前端中的应用
|
7月前
|
存储 安全 Java
java集合框架复习----(4)Map、List、set
这篇文章是Java集合框架的复习总结,重点介绍了Map集合的特点和HashMap的使用,以及Collections工具类的使用示例,同时回顾了List、Set和Map集合的概念和特点,以及Collection工具类的作用。
java集合框架复习----(4)Map、List、set