Golang | map的定义和使用
2022/3/27 6:23:05
本文主要是介绍Golang | map的定义和使用,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
Map
map是一堆键值对的未排序集合,比如以身份证号作为唯一键来标识一个人的信息。
map是引用类型,键必须支持相等运算符(==,!=)类型,比如:int,string,float等内建类型,只含有内建类型的结构体可以作为key。值可以是任意类型,没有限制。
初始化
var m1 map[string]string m2 := make(map[string]string)
map作为参数传递给函数的代价非常的小,一般在32位位的机器上只需要4字段,64位的机器上需要8字节,并且无论是多少数据,在 map 中通过 key 查找对应的 value 非常的快的。
我们使用 map 的时候,如果事先知道元素所存数量的大小,我们我可能过 make 函数预先给一个合理的数,有助于提升性能,因为事先申请了一大块内存,可以避免后续操作时频繁扩张。
m := make(map[string]string,100)
简单使用
func main() { m := map[string]string{ "a":"1", "b":"2", } // 初始化 if v, ok := m["a"]; ok { // 判断 a 是否存在,并获取 a 对应的值 fmt.Println(v) } fmt.Println(m["c"]) // 直接取不存在的值也不会报错,只会打印对应类型的初始值 m["a"] = "10" // 修改或添加map中的值 delete(m,"c") // 删除,如果 key 不存在也不会报错 fmt.Println(len(m)) // 打印对应键值对的数量 for k, v := range m { // 遍历 map,随机返回key fmt.Println(k,v) } }
map中delete的使用
func main() { m := make(map[int]struct{}) // 没有值的时候,可以使用 struct{} 初始化,节省空间 for i := 0; i < 10; i++ { m[i] = struct{}{} } fmt.Println(m) for k, _ := range m { delete(m,k) // 可以在选代的时候安全的删除 map 中的值,但是添加就不可以了 } fmt.Println(m) }
map中添加或者修改时需注意
func main() { // 因为map是无序的,每次扩张的时候,都会改变无素的位置 // 所以无法通过 key 直接修改value内部的值 m := map[string]user{ "a":{"张三"}, } m["a"].name = "李四" // 但是如果 value 是指针类型的,通过key 可以直接取到 value 的指针 // 就可以通过这种方法修改 value 内部的值 m2 := map[string]*user{ "a":&user{"张三"}, } m2["a"].name = "李四" }
Map 是无序的,但是有时候,我们想有序的取到 map 内部的值,所以我们只能通过对key进行排序,然后再通过key的值取对应value 的值。
关注公众号,随时获取最新资讯
细节决定成败!
个人愚见,如有不对,恳请斧正!
这篇关于Golang | map的定义和使用的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-26go.mod的文件内容是什么?-icode9专业技术文章分享
- 2024-11-23MongoDB身份认证机制揭秘!
- 2024-11-20MongoDB教程:从入门到实践详解
- 2024-11-17执行 Google Ads API 查询后返回的是空数组什么原因?-icode9专业技术文章分享
- 2024-11-17google广告数据不同经理账户下的凭证可以获取对方的api数据吗?-icode9专业技术文章分享
- 2024-11-15SendGrid 的 Go 客户端库怎么实现同时向多个邮箱发送邮件?-icode9专业技术文章分享
- 2024-11-15SendGrid 的 Go 客户端库怎么设置header 和 标签tag 呢?-icode9专业技术文章分享
- 2024-11-12Cargo deny安装指路
- 2024-11-02MongoDB项目实战:从入门到初级应用
- 2024-11-01随时随地一键转录,Google Cloud 新模型 Chirp 2 让语音识别更上一层楼