经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » Go语言 » 查看文章
GO基础之Map
来源:cnblogs  作者:小禾点点  时间:2019/11/4 8:47:28  对本文有异议

go开发手册:   https://studygolang.com/pkgdoc

 一、什么是map

有资料翻译成地图、映射或字典。但是大多数习惯上翻译成集合。
1、map是Go中的内置类型,它将一个值与一个键关联起来。可以使用相应的键检索值。

  • map是一种无序的键值对(key-value pair)的集合。map通过key来快速检索数据,key类似于索引,指向相应的value值。
  • map是一种集合,所以可以像遍历数组或切片那样去遍历它,不过map是无序的,所以无法决

 

2、使用map的注意细节:
• map是无序的,每次打印出来的map都会不一样,它不能通过index获取,而必须通过key获取;
• map的长度是不固定的,和slice-样可以扩展。内置的len()函数同样适用于map,返回map拥有的键值对的数量。但是map不能通过cap()函数计算容量(或者说cap()函数的参数不可以是map);
•同_tmap中key必须保证唯_。key的数据类型必须是可参与比较运算的类型,也就是支持==或!=操作的类型。如布尔型、整数型、浮点型、字符串型、数组。对于切片、函数等引用类型则不能作为键的类型;

(Invalid map key type: must not be must not be a function , map or slice)
• map的value可以是任何数据类型。
•和slice—样,map也是一种引用类型;

 

二、map的使用

1、map的声明

map中key可以是:int、float、bool、string、数组;    一定不可以是:切片、函数、map

  1. package main
  2. import (
  3. "fmt"
  4. )
  5. func main() {
  6. //map的声明 一(var 变量名 map[key的类型]value的类型 )
  7. var map1 map[string]string
  8. fmt.Printf("%T,%v,%v \n", map1, map1, map1 == nil) //map[string]string,map[],true
  9. //map声明 二
  10. map2 := make(map[string]string)
  11. fmt.Printf("%T,%v,%v \n", map2, map2, map2 == nil) //map[string]string,map[],false
  12. }

2、map的初始化

  1. package main
  2. import (
  3. "fmt"
  4. )
  5. func main() {
  6. //map的声明 一(var 变量名 map[key的类型]value的类型 )
  7. var map1 map[string]string
  8. fmt.Println("map的长度", len(map1))
  9. //在声明的同时初始化数据
  10. var map2 = map[string]string{
  11. "sz": "张三",
  12. "ls": "李四",
  13. }
  14. fmt.Println("map=", map2)
  15. //先声明 然后再赋值
  16. map3 := make(map[string]string)
  17. map3["ww"] = "王五"
  18. map3["lb"] = "刘备"
  19. fmt.Println("map=", map3)
  20. }

3、map的CURD

  1. package main
  2. import (
  3. "fmt"
  4. )
  5. func main() {
  6. //=========在声明的同时初始化数据
  7. var map2 = map[string]string{
  8. "zs": "张三",
  9. "ls": "李四",
  10. }
  11. //=========map添加数据
  12. map2["lb"] = "刘备"
  13.  
  14. //=========map的遍历
  15. for k, v := range map2 {
  16. fmt.Println("k=", k, " v=", v)
  17. }
  18. //=========根据key检测值是否存在
  19. v, ok := map2["sz"]
  20. fmt.Println("v=", v, " ok=", ok) //v= 张三 ok= true
  21. v1, ok1 := map2["sssss"]
  22. fmt.Println("v=", v1, " ok=", ok1) //v= ok= false
  23. if value, key := map2["lb"]; key {
  24. fmt.Println("元素的值=", value)
  25. }
  26. //=========修改map中key对应的value
  27. map2["zs"] = "zhangshan"
  28. fmt.Println("update=", map2)
  29. //=========delete 删除map中的元素
  30. //该函数没有返回值,如果删除不存在的key程序不会报错
  31. fmt.Println("delete befor=", map2)
  32. delete(map2, "lb")
  33. delete(map2, "HHHHHHHHHHHHHH")
  34. fmt.Println("delete after=", map2)
  35. //=========清空map (go语言没有清空的函数,如果要清空,就是直接赋新的map)
  36. map2 = map[string]string{}
  37. //map2 = make(map[string]string)
  38. fmt.Println("clear=", map2)
  39. //map是引用类型
  40. }

4、map是引用类型

  1. package main
  2. import (
  3. "fmt"
  4. "container/list"
  5. )
  6. func main() {
  7. //初始薪资
  8. salary := map[string]float64 {
  9. "Steven":15000,
  10. "Josh":20000,
  11. "Daniel":5000,
  12. }
  13. fmt.Println("初始薪资",salary)
  14. //调薪后
  15. newSalary := salary
  16. newSalary["Daniel"] = 8000
  17. fmt.Println("调薪后:" , newSalary)
  18. fmt.Println("原始薪资salary是否受影响:" , salary)
  19. //定期涨薪
  20. changeSalary(salary)
  21. fmt.Println("原始薪资salary是否受影响:" , salary)
  22. }
  23. //定期涨薪
  24. func changeSalary(m map[string]float64) {
  25. for k :=range m {
  26. m[k] *= 1.1
  27. }
  28. }

 

原文链接:http://www.cnblogs.com/jalja/p/11785336.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号