Go映射的使用
概述
在上一节的内容中,我们介绍了Go的结构体,包括:定义结构体、声明结构体变量、使用结构体、结构体关联函数、new、组合等。在本节中,我们将介绍Go的映射。Go语言中的映射(Map)是一种无序的键值对集合,使用关键字map来声明,并使用键和值类型作为参数。它是一个用于存储一系列无序的键值对的集合,基于键来存储值,键就像索引一样,指向与该键关联的值。
映射被创建和初始化后,可以通过指定适当类型的键并给这个键赋一个值来为映射赋值,每个键必须是唯一的。另外,映射是可变的,可以在已有的键值对基础上添加新的键值对。Go语言中映射的实现使用哈希表,因此它的操作是非常快速的。然而,由于映射是无序的,即使使用同样的顺序保存键值对,每次迭代映射的时候,顺序也有可能不一样。
声明映射
在Go语言中,映射的声明使用map关键字,并指定键和值的类型。以下是声明映射的语法:
var m map[keyType]valueType
其中,keyType表示键的类型,valueType表示值的类型。比如:要声明一个将字符串作为键、整数作为值的映射,可以参考下面的示例代码。
var m map[string]int
初始化映射
声明映射时,可以直接添加初始键值对,可参考下面的示例代码。
package main import "fmt" func main() { mapWebsite := map[string]int{ "CSDN": 66, "GitHub": 88, } // 输出:map[CSDN:66 GitHub:88] fmt.Println(mapWebsite) }
当然,也可以使用make函数来初始化映射。在下面的示例代码中,我们通过make函数创建了一个空的映射,可以在后续的代码中通过使用赋值操作来添加键值对。
package main import "fmt" func main() { mapWebsite := make(map[string]int) // 输出:map[] fmt.Println(mapWebsite) }
注意:映射是引用类型,使用make函数分配的是一个引用,后续对映射的修改会影响到原始的映射对象。
操作映射
声明映射后,我们可以向映射中添加新的键值对,也可以访问和修改映射中的值。具体用法可参考下面的示例代码。
package main import "fmt" func main() { mapWebsite := make(map[string]int) // 添加新的键值对 mapWebsite["CSDN"] = 66 mapWebsite["GitHub"] = 88 // 输出:map[CSDN:66 GitHub:88] fmt.Println(mapWebsite) // 访问键对应的值,输出:88 fmt.Println(mapWebsite["GitHub"]) mapWebsite["CSDN"] = 99 // 修改键对应的值,输出:99 fmt.Println(mapWebsite["CSDN"]) }
另外,我们可以使用len()函数获取映射的长度,使用delete()函数删除某个键值对。
package main import "fmt" func main() { mapWebsite := map[string]int{ "CSDN": 66, "GitHub": 88, } // 输出:2 fmt.Println(len(mapWebsite)) delete(mapWebsite, "GitHub") // 输出:1 fmt.Println(len(mapWebsite)) }
可以使用如下方式检查键是否存在于映射中:value, ok := mapName[key]。其中,mapName是映射的变量名,key是要检查的键。如果key存在于mapName中,那么value将是对应的值,并且ok将置为true;否则,value将是零值,并且ok将置为false。
package main import "fmt" func main() { mapWebsite := map[string]int{ "CSDN": 66, "GitHub": 88, } value, ok := mapWebsite["CSDN"] if ok { // 输出:existed: 66 fmt.Printf("existed: %d\n", value) } else { fmt.Println("not exist") } }
要遍历map,我们可以使用range关键字。当遍历map时,range会返回两个值:键和对应的值。具体用法可参考下面的示例代码。
package main import "fmt" func main() { mapFruit := make(map[string]int) mapFruit["Apple"] = 66 mapFruit["Banana"] = 88 mapFruit["Orange"] = 99 /* 遍历map,输出: Apple 66 Banana 88 Orange 99 */ for key, value := range mapFruit { fmt.Println(key, value) } }
到此这篇关于Go映射的使用的文章就介绍到这了,更多相关Go映射内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
浅析Go中fasthttp与net/http的性能对比及应用
这篇文章主要为大家详细介绍了Golang中fasthttp的底层实现以及与net/http的区别,下面就跟随小编一起来看看fasthttp到底是如何做到性能如此之快的吧2024-03-03
最新评论