Go语言基础map用法及示例详解


Posted in Golang onNovember 17, 2021

Go语言基础map用法及示例详解

概述

  • map是基于key-value键值对的无序的集合
  • Go语言中的map是引用类型
  • 必须初始化才能使用。

语法

声明和初始化

配合make使用,否则是nil

var map[KeyType]ValueType
//KeyType:表示键的类型
//ValueType:表示键对应的值的类型
make(map[KeyType]ValueType, [cap])
//cap表示map的容量,该参数虽然不是必须的,但是我们应该在初始化map的时候就为其指定一个合适的容量
//当你的容量超过时会自动扩充

例子:

//1.声明
var name1 map[int]string   //key是int,value是string
var name2 map[string]string  //key是string,value是string
//字面量
names3:=map[int]string{0:"张三",1:"李四"}
//2.分配内存
name1 = make(map[int]string, 2)         //2:map的容量,当你的容量超过时会自动扩充
name2 = make(map[string]string, 2)
//3.赋值
//3.1 通过KeyType赋值
name1[0]="张三"   //key:0   value:张三
name1[1]="李四"   //key:1   value:李四
name1[2]="王五"   //key:2   value:王五    //已经超过了分配的的容量,会自动扩充
name2["A"]="张三"
name2["B"]="李四"

读取

根据KeyType来读取

如果keyType存在,就返回那个值,如果不存在,返回类型默认值值

fmt.Println(name1[0])
fmt.Println(name2["B"])

测试map中key值是否存在

通过KeyType来取值时,会返回两个值,一个是vlue,另一个是是否存在的bool

if value, ok := name1[5]; ok {
	fmt.Println("存在这个值",value)
} else {
	fmt.Println("不存在这个值", value)
}

删除

delete(map[int]string,[KeyType])

例子

delete(name1 , 1)

遍历

range

例子:

for key,value:=range name1 {
	fmt.Printf("key=%d,value=%s\n",key,value)
}
for key,value:=range name2 {
	fmt.Printf("key=%s,value=%s\n",key,value)
}

总结

  1. map必须借助make分配内存空间,否则是nil
  2. 字面量初始化必修保证key是唯一的,否则error
  3. map传递的是引用,就是说形参会改变实参的值
  4. 直接对map对象使用[]操作符获得的对象不能直接修改状态
  5. map中存储指针而不是结构体

示例

package main
import "fmt"
func main() {
	//一、声明和初始化【配合make使用,否则是nil】
	//1.声明
	var name1 map[int]string    //key是int,value是string
	var name2 map[string]string //key是string,value是string
	//2.分配内存
	name1 = make(map[int]string, 2) //2:map的容量,当你的容量超过时会自动扩充
	name2 = make(map[string]string, 2)
	//3.赋值
	//3.1 通过KeyType赋值
	name1[0] = "张三" //key:0   value:张三
	name1[1] = "李四" //key:1   value:李四
	name1[2] = "王五" //key:2   value:王五    //已经超过了分配的的容量,会自动扩充
	name2["A"] = "张三"
	name2["B"] = "李四"
	//二、读取
	//	1. 根据KeyType来读取,如果keyType存在,就返回那个值,如果不存在,返回类型默认值值
	fmt.Println(name1[0])
	fmt.Println(name2["B"])
	//	2. 测试map中key值是否存在【通过KeyType来取值时,会返回两个值,一个是vlue,另一个是是否存在的bool】
	if value, ok := name1[2]; ok {
		fmt.Println("存在这个值", value)
	} else {
		fmt.Println("不存在这个值", value)
	}
	//三、删除
	delete(name1, 1)  //删除了李四
	delete(name2, "C")   //没有这个C
	fmt.Println(name1)
	fmt.Println(name2)
	//四、遍历
	for key,value:=range name1 {
		fmt.Printf("key=%d,value=%s\n",key,value)
	}
	for key,value:=range name2 {
		fmt.Printf("key=%s,value=%s\n",key,value)
	}
}

以上就是Go语言基础map用法及示例详解的详细内容,更多关于Go语言基础的资料请关注三水点靠木其它相关文章!

Golang 相关文章推荐
Go语言使用select{}阻塞main函数介绍
Apr 25 Golang
golang中实现给gif、png、jpeg图片添加文字水印
Apr 26 Golang
Golang中interface{}转为数组的操作
Apr 30 Golang
解决go在函数退出后子协程的退出问题
Apr 30 Golang
golang协程池模拟实现群发邮件功能
May 02 Golang
Golang全局变量加锁的问题解决
May 08 Golang
go语言中http超时引发的事故解决
Jun 02 Golang
Go 语言结构实例分析
Jul 04 Golang
如何解决goland,idea全局搜索快捷键失效问题
Apr 03 Golang
Golang Elasticsearches 批量修改查询及发送MQ
Apr 19 Golang
Golang MatrixOne使用介绍和汇编语法
Apr 19 Golang
Golang日志包的使用
Apr 20 Golang
Go语言基础函数基本用法及示例详解
Nov 17 #Golang
golang中的struct操作
Nov 11 #Golang
Go 语言中 20 个占位符的整理
Oct 16 #Golang
Golang中channel的原理解读(推荐)
Oct 16 #Golang
Go语言并发编程 sync.Once
Oct 16 #Golang
Go 通过结构struct实现接口interface的问题
Oct 05 #Golang
golang实现一个简单的websocket聊天室功能
You might like
PHP开启gzip页面压缩实例代码
2010/03/11 PHP
php设置静态内容缓存时间的方法
2014/12/01 PHP
PHP7 mongoDB扩展使用的方法分享
2019/05/02 PHP
不要小看注释掉的JS 引起的安全问题
2008/12/27 Javascript
Ext 表单布局实例代码
2009/04/30 Javascript
JavaScript 实现模态对话框 源代码大全
2009/05/02 Javascript
document.body.scrollTop 值总为0的解决方法 比较常见的标准问题
2009/11/30 Javascript
用jquery设置按钮的disabled属性的实现代码
2010/11/28 Javascript
JQquery的一些使用心得分享
2012/08/01 Javascript
JS分页效果示例
2013/10/11 Javascript
推荐一个封装好的getElementsByClassName方法
2014/12/02 Javascript
JavaScript使用键盘输入控制实现数字验证功能
2016/08/19 Javascript
vuejs使用$emit和$on进行组件之间的传值的示例
2017/10/04 Javascript
vue2.0 常用的 UI 库实例讲解
2017/12/12 Javascript
使用JS模拟锚点跳转的实例
2018/02/01 Javascript
jQuery事件委托代码实践详解
2019/06/21 jQuery
Python sys.argv用法实例
2015/05/28 Python
python Pygame的具体使用讲解
2017/11/03 Python
python实现点对点聊天程序
2018/07/28 Python
tensorflow没有output结点,存储成pb文件的例子
2020/01/04 Python
Python自动采集微信联系人的实现示例
2020/02/28 Python
韩国现代百货官网:Hmall
2018/03/21 全球购物
Bodum官网:咖啡和茶壶、玻璃器皿、厨房电器等
2018/08/01 全球购物
正宗的日本零食和糖果订阅盒:Bokksu
2019/11/21 全球购物
静态变量和实例变量的区别
2015/07/07 面试题
优秀党员转正的自我评价
2013/10/06 职场文书
七夕情人节促销方案
2014/06/07 职场文书
通信工程求职信
2014/07/16 职场文书
关于感恩的演讲稿400字
2014/08/26 职场文书
党员个人整改措施
2014/10/24 职场文书
幼儿园2014年度工作总结
2014/11/10 职场文书
小学班主任事迹材料
2014/12/17 职场文书
2015年大班保育员工作总结
2015/05/18 职场文书
Java elasticsearch安装以及部署教程
2021/06/28 Java/Android
深入理解Pytorch微调torchvision模型
2021/11/11 Python
python 多态 协议 鸭子类型详解
2021/11/27 Python