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
}
}

GO基础之Map的更多相关文章

  1. Go语言基础之map

    Go语言基础之map Go语言中提供的映射关系容器为map,其内部使用散列表(hash)实现. map map是一种无序的基于key-value的数据结构,Go语言中的map是引用类型,必须初始化才能 ...

  2. Java基础关于Map(字典)的方法使用

    Java基础关于Map(字典)的方法使用 java中一般用map与hashmap来创建一个key-value对象 使用前提是要导入方法包: import java.util.HashMap: impo ...

  3. GO学习-(11) Go语言基础之map

    Go语言基础之map Go语言中提供的映射关系容器为map,其内部使用散列表(hash)实现. map map是一种无序的基于key-value的数据结构,Go语言中的map是引用类型,必须初始化才能 ...

  4. 【JAVA基础】 MAP 遍历

    public static void main(String[] args) { Map<String, String> map = new HashMap<String, Stri ...

  5. 黑马程序员——JAVA基础之Map集合

    ------- android培训.java培训.期待与您交流! ---------- Map集合: 该集合存储键值对.一对一对往里存.而且要保证键的唯一性. 和Set很像,其实Set底层就是使用了M ...

  6. python基础之map/reduce/filter/sorted

    ---map(fun,iterable) 首先来看一看map()函数,map函数接受两个参数,第一个参数是函数的名称,第二个参数一个可迭代对象.即map(fun,iterable) map函数就是将具 ...

  7. go语言基础之map赋值、遍历、删除 、做函数参数

    1.map赋值 示例: package main //必须有个main包 import "fmt" func main() { m1 := map[int]string{1: &q ...

  8. go语言基础之map介绍和使用

    1.map介绍 Go语言中的map(映射.字典)是一种内置的数据结构,它是一个无序的key—value对的集合,比如以身份证号作为唯一键来标识一个人的信息. 2.map示例 map格式为: map[k ...

  9. java 基础 --Collection(Map)

    Map是不是集合?哈哈哈 java编程思想>的第11章,第216页,正数第13行,中原文:“……其中基本的类型是LIst.Set.Queue和Map.这些对象类型也称为集合类,但由于Java类库 ...

  10. Java基础之Map的遍历

    遍历Map集合,有四种方法:   public static void main(String[] args) { Map<String, String> map = new HashMa ...

随机推荐

  1. Spring Boot微服务电商项目开发实战 --- 分布式开发要避的那些坑

    今天已经进入第七讲了,整个微服务架构的搭建工作也基本完成.那到目前为止究竟使用了那些技术及实现了什么功能呢?我们先回顾一下. 使用的技术:SpringBoot.Dubbo.Zookeeper.Redi ...

  2. python的tqdm模块介绍

    https://www.jianshu.com/p/b27318efdb7b Tqdm 是 Python 进度条库,可以在 Python 长循环中添加一个进度提示信息用法:tqdm(iterator) ...

  3. 一个小工具帮你搞定实时监控Nginx服务器

    Linux运维工程师的首要职责就是保证业务7 x 24小时稳定的运行,监控Web服务器对于查看网站上发生的情况至关重要.关注最多的便是日志变动,查看实时日志文件变动大家第一反应应该是'tail -f ...

  4. Linux服务器部署.Net Core笔记:五、安装Nginx

    我们搜索一下yum库关于nginx的rpm包:yum list | grep nginx 找到rpm安装包,我们就可以使用yum直接安装了:yum install nginx 修改nginx配置文件: ...

  5. C#Protected和多态(虚方法)

    Protected 在基类中定义后,能被派生类调用,但是不能被其他类调用. virtual 在基类中定义后,在派生类中能被重写. using System; using System.Collecti ...

  6. linux 用户,组

    权限: 所谓的权限是,由用户启动的进程,或者由操作系统启动的进程,可以访问哪些文件,不可以访问哪些文件. 进程太多了,不可能为每个进程定义权限对吧,所以进程的权限来自于启动进程的用户. 用户有哪些权限 ...

  7. 第1章:C++泛型技术基础:模板——《C++泛型:STL原理和应用》读书笔记整理

    第1章:C++泛型技术基础:模板 1.2 关于模板参数 1.2.1 模板参数类型 类型参数   typename声明的参数都属于类型参数,它的实参必须为系统内置或者用户自定义的数据类型,包括类模板实体 ...

  8. 互联网大厂Java面试题集—Spring boot面试题(一)

    Spring Boot 需要独立的容器运行吗? 可以不需要,内置了 Tomcat/ Jetty 等容器.通过pom.xml中导入依赖: <!--spring-boot-starter-web:代 ...

  9. python3读取图像并可视化的方法(PIL/Pillow、opencv/cv2)

    原图: 使用TensorFlow做图像处理的时候,会对图像进行一些可视化的操作.下面,就来列举一些我知道的图像读取并可视化的方法. 1. Pillow模块 1.1 Pillow模块的前生 Pillow ...

  10. css知识笔记:水平垂直居中(别只看,请实操!!!)

    css实现元素的水平垂直居中. (尝试采用5W2H方法说明): 别只看,请实操!!! What: 1.这篇文档主要描述元素水平方向居中的几种最常见和最实用的几种方式,并说明优缺点. 2.写这篇文章的目 ...