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. iOS核心动画高级技巧 - 7

    13. 高效绘图 高效绘图 不必要的效率考虑往往是性能问题的万恶之源. ——William Allan Wulf 在第12章『速度的曲率』我们学习如何用Instruments来诊断Core Anima ...

  2. 深度学习优质学习项目大放送!-AI Studio精选开源项目合集推荐

    近期 在AI Studio上发现了不少优质的开源深度学习项目,从深度学习入门到进阶,涵盖了CV.NLP.生成对抗网络.强化学习多个研究方向,还有最新的动态图,都以NoteBook的方式直接开源出来,并 ...

  3. 百度大脑UNIT3.0详解之数据生产工具DataKit

    在智能对话项目搭建的过程中,高效筛选.处理对话日志并将其转化为新的训练数据,是对话系统效果持续提升的重要环节,也是当前开发者面临的难题之一.为此百度大脑UNIT推出学习反馈闭环机制,提供数据获取.辅助 ...

  4. 面试连环炮系列(九):为什么ConcurrentHashMap是线程安全的

    为什么ConcurrentHashMap是线程安全的 JDK1.7中,ConcurrentHashMap使用的锁分段技术,将数据分成一段一段的存储,然后给每一段数据配一把锁,当一个线程占用锁访问其中一 ...

  5. 可编程实验板EPM1270T144C5使用说明

  6. WebMvcConfigurationSupport 避坑指南

    通过返回WebMvcConfigurationSupport 的方式, 默认会覆盖 Spring boot的自动配置, 导致配置失效静态资源无法访问:但是在WebMvcConfigurationadp ...

  7. jquery 点击tr选中checkbox,解决checkbox的默认点击事件被阻止的问题

        1.第一种,!$(event.target).is('input'),判断触发事件的元素是否为input.此时使用event.target,而不是this,获取事件本身,防止触发事件冒泡的问题 ...

  8. 整理h5移动端适配方案

    <使用Flexible实现手淘H5页面的终端适配>:https://github.com/amfe/article/issues/17 <再聊移动端页面的适配>:https:/ ...

  9. MySql 更新死锁问题 Deadlock found when trying to get lock; try restarting transaction

    文章导航-readme MySql 更新死锁问题 Deadlock found when trying to get lock; try restarting transaction 1.场景 //t ...

  10. 小白到大神,你需要了解的 sqlite 最佳实践

    本文微信公众号「AndroidTraveler」首发. 背景 本文是对一篇英文文档的翻译,原文请见文末链接. 并发数据库访问 假设你实现了自己的 SQLiteOpenHelper. public cl ...