golang中的map
1. 声明与初始化
// map的声明与初始化
userInfo := map[string]string{"name": "马亚南", "age": "18"}
fmt.Println(userInfo)
fmt.Println(userInfo["name"]) // 马亚南
userInfo["age"] = "28"
fmt.Println(userInfo)
userInfo["email"] = "wupeiqi@live.com"
fmt.Println(userInfo) // 声明
var userInfo2 = map[string]string{}
userInfo2["age"] = "88"
fmt.Println(userInfo2) // make创建map
data := make(map[int]int)
data[100] = 998
data[200] = 999
fmt.Println(data) // 只有声明,nil ,无法设置
var row map[int]int // 这种声明用于整体的赋值
//row["name"] = 666 // 错误的
row = data
fmt.Println(row) // new创建map, nil
// 这种声明也是用于整体的赋值,但是赋值的是map的指针类型
value := new(map[int]int)
value = &data
fmt.Println(*value)
// 注意:键不重复、键必须可哈希(int/bool/float/string/array),map是无序的
v1 := make(map[[2]int]float32)
v1[[2]int{11, 22}] = 3.15
v1[[2]int{33, 44}] = 2.88
fmt.Println(v1)
2. map的长度和容量
// 1. 长度和容量
data := map[string]string{"n1": "武沛齐", "n2": "alex"}
fmt.Println(len(data)) // 2. make创建map并且指定了容量cap
// 根据参数值10,计算出合适的容量
// 一个map中会包含很多的桶,每个桶中可以存放8个键值对
info := make(map[string]string, 10)
info["n1"] = "武沛齐"
info["n2"] = "alex" fmt.Println(len(info))
//fmt.Println(cap(info)) 报错
3. map中value的嵌套用法
// value中的嵌套
// map的值可以使任意类型
// 值是数组类型
v4 := make(map[string][]int)
v4["n1"] = []int{11, 22, 33, 44, 55}
v4["n2"] = []int{11, 22}
fmt.Println(v4) // 值是map类型
v5 := make(map[string]map[int]int)
v5["n1"] = map[int]int{1: 999, 2: 888}
v5["n2"] = map[int]int{11: 99, 22: 88}
fmt.Println(v5) // 值是数组类型,值得数组中存储的是map类型
v7 := make(map[string][2]map[string]string)
v7["n11"] = [2]map[string]string{{"name": "马亚南"}, {"name": "马馨彤"}}
v7["n12"] = [2]map[string]string{{"age": "18"}, {"age": "28"}}
fmt.Println(v7)
4. map的增删改查
data := map[string]string{"n1": "武沛齐", "n2": "alex"}
// 增加
data["n3"] = "eric"
// 修改
data["n1"] = "武沛齐2"
// 删除
delete(data, "n2")
// 查看
fmt.Println(data["n1"])
// 循环查看键值对
for key, value := range data {
fmt.Println(key, value)
}
// 循环查看键
for key := range data {
fmt.Println(key)
}
// 循环查看值
for _, value := range data {
fmt.Println(value)
}
5. map中键的嵌套
// 键不重复 & 键必须可哈希
data1 := make(map[int]int)
data2 := make(map[bool]int)
data3 := make(map[float32]int)
data4 := make(map[string]int)
data5 := make(map[[2]int]int)
//data6 := make(map[[]int]int) // 错误, 不可哈希
//data7 := make(map[map[int]int]int) // 错误, 不可哈希
//data8 := make(map[ [2]map[string]string ]int) // 错误, 虽然键是数组,但是数组里面的值是map,所以不可哈希
6. map中变量赋值
// 变量赋值,
map1 := map[string]string{"n1": "武沛齐", "n2": "alex"}
map2 := map1 map1["n1"] = "哈哈"
fmt.Println(map1)
fmt.Println(map2)
特别提醒:map中无论是否存在扩容,都指向同一个地址
golang中的map的更多相关文章
- golang中,map作为函数参数是如何传递的
当你声明一个map的时候: m := make(map[int]int) 编译器会调用 runtime.makemap: // makemap implements a Go map creation ...
- Golang中的Map(集合)
Map 是一种无序的键值对的集合.Map 最重要的一点是通过 key 来快速检索数据,key 类似于索引,指向数据的值. Map 是一种集合,所以我们可以像迭代数组和切片那样迭代它.不过,Map 是无 ...
- Golang 中使用多维 map
http://tnt.wicast.tk/2015/11/02/golang-multiple-dimension-map/ Golang 的 XML/JSON 解析库乍看使用起来很方便,只要构造一样 ...
- golang中map原理剖析
1. golang中的map有自己的一套实现原理,其核心是由hmap和bmap两个结构体实现的 2. 初始化map package main func main() { // 初始化一个可容纳10个 ...
- 说说不知道的Golang中参数传递
本文由云+社区发表 导言 几乎每一个C++开发人员,都被面试过有关于函数参数是值传递还是引用传递的问题,其实不止于C++,任何一个语言中,我们都需要关心函数在参数传递时的行为.在golang中存在着m ...
- Golang基础教程——map使用篇
本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是golang专题的第7篇文章,我们来聊聊golang当中map的用法. map这个数据结构我们经常使用,存储的是key-value的键 ...
- Go_14:GoLang中 json、map、struct 之间的相互转化
1. golang 中 json 转 struct <1. 使用 json.Unmarshal 时,结构体的每一项必须是导出项(import field).也就是说结构体的 key 对应的首字母 ...
- GoLang中 json、map、struct 之间的相互转化
1. golang 中 json 转 struct <1. 使用 json.Unmarshal 时,结构体的每一项必须是导出项(import field).也就是说结构体的 key 对应的首字母 ...
- golang 中 map 转 struct
golang 中 map 转 struct package main import ( "fmt" "github.com/goinggo/mapstructure&qu ...
随机推荐
- windows10源码编译llvm
准备 cmake, 我目前使用的版本是3.18 llvm 源码, 我下载的是 11.0 我已经具备Vs2015和Vs2017的开发环境. debug模式编译需要较多内存和较多硬盘存储空间. (debu ...
- 【机器学*】k-*邻算法(kNN) 学*笔记
[机器学*]k-*邻算法(kNN) 学*笔记 标签(空格分隔): 机器学* kNN简介 kNN算法是做分类问题的.思想如下: KNN算法的思想总结一下:就是在训练集中数据和标签已知的情况下,输入测试数 ...
- 【剑指Offer】字符串的排列 解题报告(Python)
[剑指Offer]字符串的排列 解题报告(Python) 标签(空格分隔): LeetCode 题目地址:https://www.nowcoder.com/ta/coding-interviews 题 ...
- 「Codeforces 79D」Password
Description 有一个 01 序列 \(a_1,a_2,\cdots,a_n\),初始时全为 \(0\). 给定 \(m\) 个长度,分别为 \(l_1\sim l_m\). 每次可以选择一个 ...
- [opencv]findcoutours函数使用
轮廓是定义或限定形状或对象的边或线,是机器视觉中的常用的概念,多用于目标检测.识别等任务. 关于OpenCV轮廓操作,尤其是级别及如何使用轮廓级别进行筛选等问题,相关文章比较少,正好最近用到,因此将其 ...
- CS5265完全替代兼容龙迅LT8711|Type-C/DP1.2 to HDMI2.0方案芯片|CS5265兼容TYPEC手机笔电
龙迅LT8711是一款Type-C/DP1.2 to HDMI2.0方案芯片.LT8711HE是一款高性能Type-C/DP1.2至HDMI2.0转换器,设计用于将USB typec或DP1.2源连接 ...
- 【Redhat系列linux防火墙工具】firewalld与iptables防火墙工具的激烈碰撞
前言 iptables与firewalld防火墙管理工具在linux发行版Redhat7系列使用较为广泛. UFW则是在linux发行版Ubuntu下进行管理防火墙的一款管理工具. 在选用防火墙工具的 ...
- 使用 SSH 隧道实现端口转发、SOCKS 代理
SSH隧道 本地端口转发 本地客户端通过 local_port 连接到 MobaXterm: MobaXterm 绕过防火墙,使用 user 用户连接到 ssh_server_ip:ssh_serve ...
- rsync配置文件讲解
1.安装rysnc 一般在安装系统时rsync是安装上(yum安装) 2. vim /etc/xinetd.d/rsync 在这个路径下有配置文件 service rsync { disabl ...
- 【Spring专场】「AOP容器」不看源码就带你认识核心流程以及运作原理
前提回顾 前一篇文章主要介绍了spring核心特性机制的IOC容器机制和核心运作原理,接下来我们去介绍另外一个较为核心的功能,那就是AOP容器机制,主要负责承接前一篇代理模式机制中动态代理:JDKPr ...