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

package main

import (
"fmt"
) func main() {
//map的声明 一(var 变量名 map[key的类型]value的类型 )
var map1 map[string]string
fmt.Printf("%T,%v,%v \n", map1, map1, map1 == nil) //map[string]string,map[],true
//map声明 二
map2 := make(map[string]string)
fmt.Printf("%T,%v,%v \n", map2, map2, map2 == nil) //map[string]string,map[],false
}

2、map的初始化

package main

import (
"fmt"
) func main() {
//map的声明 一(var 变量名 map[key的类型]value的类型 )
var map1 map[string]string
fmt.Println("map的长度", len(map1))
//在声明的同时初始化数据
var map2 = map[string]string{
"sz": "张三",
"ls": "李四",
}
fmt.Println("map=", map2) //先声明 然后再赋值
map3 := make(map[string]string)
map3["ww"] = "王五"
map3["lb"] = "刘备"
fmt.Println("map=", map3)
}

3、map的CURD

package main

import (
"fmt"
) func main() {
//=========在声明的同时初始化数据
var map2 = map[string]string{
"zs": "张三",
"ls": "李四",
}
//=========map添加数据
map2["lb"] = "刘备" //=========map的遍历
for k, v := range map2 {
fmt.Println("k=", k, " v=", v)
}
//=========根据key检测值是否存在
v, ok := map2["sz"]
fmt.Println("v=", v, " ok=", ok) //v= 张三 ok= true
v1, ok1 := map2["sssss"]
fmt.Println("v=", v1, " ok=", ok1) //v= ok= false
if value, key := map2["lb"]; key {
fmt.Println("元素的值=", value)
}
//=========修改map中key对应的value
map2["zs"] = "zhangshan"
fmt.Println("update=", map2) //=========delete 删除map中的元素
//该函数没有返回值,如果删除不存在的key程序不会报错
fmt.Println("delete befor=", map2)
delete(map2, "lb")
delete(map2, "HHHHHHHHHHHHHH")
fmt.Println("delete after=", map2)
//=========清空map (go语言没有清空的函数,如果要清空,就是直接赋新的map)
map2 = map[string]string{}
//map2 = make(map[string]string)
fmt.Println("clear=", map2) //map是引用类型 }

4、map是引用类型

package main

import (
"fmt"
"container/list"
) func main() {
//初始薪资
salary := map[string]float64 {
"Steven":,
"Josh":,
"Daniel":,
}
fmt.Println("初始薪资",salary) //调薪后
newSalary := salary
newSalary["Daniel"] =
fmt.Println("调薪后:" , newSalary)
fmt.Println("原始薪资salary是否受影响:" , salary) //定期涨薪
changeSalary(salary)
fmt.Println("原始薪资salary是否受影响:" , salary)
} //定期涨薪
func changeSalary(m map[string]float64) {
for k :=range m {
m[k] *= 1.1
}
}

最新文章

  1. c#与JavaScript实现对用户名、密码进行RSA非对称加密
  2. JS-DOM对象知识点汇总(慕课)
  3. Styling FX Buttons with CSS
  4. Ubuntu 使用apt-get时提示错误:无法获得锁 /var/lib/dpkg/lock
  5. (转载博文)VC++API速查
  6. 【LeetCode题意分析&解答】34. Search for a Range
  7. 正则RegEXp
  8. Python 的PyCurl模块使用
  9. plupload插件的错误SCRIPT601
  10. UWP 图片缩放
  11. 医学图像数据(三)——TCIA部分数据下载方式
  12. python学习中遇到的问题
  13. LOJ.6235.区间素数个数(Min_25筛)
  14. 组队项目,Main队伍
  15. android AsyncHttpClient使用
  16. Chap2:什么是shell[The Linux Command Line]
  17. 微信 公众号平台 与 开放平台 获取用户信息 scope snsapi_login
  18. Android-Kotlin简单计算器功能
  19. unity音量设置(同时设置到多个物体上)——引伸语言设置
  20. LeetCode 606. Construct String from Binary Tree根据二叉树创建字符串 (C++)

热门文章

  1. Mysql—mysqladmin 命令详解
  2. Python 之列表切片的四大常用操作
  3. Java之数据库表字段有关键字报错java.sql.SQLSyntaxErrorException
  4. Ansible-下部
  5. Java之封装与访问权限控制(一)
  6. 通过requestAnimationFrame判断浏览器帧率
  7. C# List与Dictionary相互转换与高效查找
  8. 文件上传报错:Unknown: file created in the system's temporary directory
  9. Android五大布局详解——GridLayout(网格布局)
  10. QT程序自启动