1.map的基本介绍

  map是key-value数据结构,又称为字段或者关联数组。类似其它编程语言的集合,在编程中是经常使用到的

2.map的声明

  1)基本语法

     var map 变量名 map[keytype] valuetype

注意:声明是不会分配内存的,初始化需要make,分配内存后才能赋值和使用。

func main() {
var a map[string]string
a = make(map[string]string, 10)
a["no1"] = "allin"
a["no2"] = "alex"
a["no1"] = "egon"
a["no3"] = "sdfegon"
fmt.Println(a)
}

对上面代码的说明

  a.map在使用前一定要make

  b.map的key是不能重复,如果重复了,则以最后这个key-value为准

  c.map的value是可以相同的

  d.map的key-value是无序

  e.make内置函数数目

map的三种声明方式:

    var a map[string]string
a = make(map[string]string, 10)
a["no1"] = "allin"
a["no2"] = "alex"
a["no1"] = "egon"
a["no3"] = "sdfegon"
fmt.Println(a) var b map[string]string
b = make(map[string]string, 10)
b["no1"] = "宋江"
b["no2"] = "吴用"
b["no1"] = "武松"
b["no3"] = "吴用"
fmt.Println(b) heros := map[string]string {
"hero1": "宋江",
"hero2": "lujunyi",
"hero3": "吴用",
}
heros["hero4"] = "林冲"
fmt.Println("heros=", heros)

map删除:

  delete(map, "key"),delete是一个内置函数,如果key存在,就删除该key-value,如果key不存在,不操作,但是也不会报错。

如果我们要删除map的所有key,没有一个专门的方法一次删除,可以遍历一下key,逐个删除或者map = kake(...),make一个新的,让原来的成为垃圾,被gc回收。

map查找:

  

val, ok := studentMap["stu02"]["name"]
if ok {
fmt.Println("aaa", val)
} else {
fmt.Println("bbb")
}

说明:如果student这个mapk中存在“nol", 那么返回true, 否则返回false

map遍历:

  

for _, v := range studentMap {
//fmt.Println(k, v)
for k1, v1 := range v {
fmt.Println(k1, v1)
}
}

map切片:

  切片的数据类型如果是map,则我们称为slice of map,map切片,这样使用则map个数就可以动态变化了

map排序:

  golang中没有一个专门的方法针对map的key进行排序

  golang中map的排序,是先将key进行排序,然后根据key值遍历输出即可

    map1 := make(map[int]int, 10)
map1[10] = 100
map1[1] = 13
map1[4] = 56
map1[8] = 90
fmt.Println(map1) var keys []int
for k, _ := range map1 {
keys = append(keys, k)
}
sort.Ints(keys)
for _, k := range keys {
fmt.Printf("map1[%v]=%v \n", k, map1[k])
}

map使用细节:

  1)map费用类型,遵守引用类型传递的机制,在一个函数接收map,修改后,会直接修改原来的map

  2)map的容量达到后,再想map增加元素,会自动扩容,并不会发生panic,也就是说map能动态的增长键值对

  3)map的value也经常使用struct类型,更适合管理复杂的数据

golang之map的使用声明的更多相关文章

  1. Golang中map的三种声明方式和简单实现增删改查

    package main import ( "fmt" ) func main() { test3 := map[string]string{ "one": & ...

  2. 总结golang之map

    总结golang之map 2017年04月13日 23:35:53 趁年轻造起来 阅读数:18637 标签: golangmapgo 更多 个人分类: golang   版权声明:本文为博主原创文章, ...

  3. golang 中 map 转 struct

    golang 中 map 转 struct package main import ( "fmt" "github.com/goinggo/mapstructure&qu ...

  4. golang的map

    map--字典 map的基本使用: package main import "fmt" // 先声明 type PersonInfo struct { id string name ...

  5. Golang:sync.Map

    由于map在gorountine 上不是安全的,所以在大量并发读写的时候,会出现错误. 在1.9版的时候golang推出了sync.Map. sync.Map 通过阅读源码我们发现sync.Map是通 ...

  6. Golang 使用Map构建Set类型的实现方法

    前言 本篇主要给大家讲述了如何利用Go语言的语法特性实现Set类型的数据结构,分享出来供大家参考学习,话不多说了,来一起看看详细的介绍吧. 需求 对于Set类型的数据结构,其实本质上跟List没什么多 ...

  7. golang之map数据类型

    先上代码…… package main import "fmt" func testMap() { //两种声明map方式,切记,必须初始化才能用,否则panic //var a ...

  8. golang 基础 map及工厂函数

    Map是一种数据结构,是一个集合,用于存储一系列无序的键值对.它基于键存储的,键就像一个索引一样,这也是Map强大的地方,可以快速快速检索数据,键指向与该键关联的值. 内部实现 Map是基于 散列表 ...

  9. golang中map原理剖析

    1. golang中的map有自己的一套实现原理,其核心是由hmap和bmap两个结构体实现的 2.  初始化map package main func main() { // 初始化一个可容纳10个 ...

随机推荐

  1. $('#jyzjg').combobox('clear');

        $('#jyzjg').combobox('clear');                   alert($('#jyzjg').combobox("getValue" ...

  2. opencv VS C++ 配置

    包含目录 $(OPENCV)\include\ $(OPENCV)\include\opencv\ $(OPENCV)\include\opencv2\   即: D:\opencv\opencv\b ...

  3. Qt实现原生Flow实现不了的Item错误排列效果,类似淘宝商品展示

    main.qml import QtQuick 2.12 import QtQuick.Window 2.12 import QtQml.Models 2.12 Window { visible: t ...

  4. 运维管理SLA

    主要三个概念: SLI 服务关键量化指标,即测试哪些指标,如何测等 SLO :服务等级目标,即要达到哪些目标,如设备正常率3个9.4个9等,即99.9% SLA:  服务等级协议,即如果未完成SLO中 ...

  5. linux下修改jar中的文件

    解压修改后再打包 解压: jar xvf xxx.jar 打包: jar cvfm0 xxx.jar META-INF/MANIFEST.MF ./ 注: -m参数可以将 一个具体的mainfest文 ...

  6. chrome dev

    chrome://plugins 为什么无法打开? Chrome插件问答 2018-03-02 13:34     最后又很多网友在我们 chrome插件 网反应说chrome://plugins 无 ...

  7. redis配置文件讲解

    #redis.conf # Redis configuration file example. # ./redis-server /path/to/redis.conf ############### ...

  8. 【分类算法】朴素贝叶斯(Naive Bayes)

    0 - 算法 给定如下数据集 $$T=\{(x_1,y_1),(x_2,y_2),\cdots,(x_N,y_N)\},$$ 假设$X$有$J$维特征,且各维特征是独立分布的,$Y$有$K$种取值.则 ...

  9. ES6深入浅出-1 新版变量声明:let 和 const-3.视频 相关面试题

    执行顺序问题 请问console.log输出的值是多少 输出的肯定是1 假如这里有一行未知的代码 会打印出几? 如果这段未知的代码是a=2.那么其实console输出的就是2 只关心代码,没有关心代码 ...

  10. (十八)Centos之firewall 防火墙命令

    如果你的系统上没有安装使用命令安装 #yum install firewalld  //安装firewalld 防火墙 开启服务 # systemctl start firewalld.service ...