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各时间字符串使用解析
Apr 02 Golang
golang如何去除多余空白字符(含制表符)
Apr 25 Golang
彻底理解golang中什么是nil
Apr 29 Golang
Go语言 go程释放操作(退出/销毁)
Apr 30 Golang
Go 自定义package包设置与导入操作
May 06 Golang
解决golang 关于全局变量的坑
May 06 Golang
Go遍历struct,map,slice的实现
Jun 13 Golang
golang中字符串MD5生成方式总结
Jul 04 Golang
GO语言异常处理分析 err接口及defer延迟
Apr 14 Golang
Golang入门之计时器
May 04 Golang
GoFrame gredis缓存DoVar Conn连接对象 自动序列化GoFrame gredisDo/DoVar方法Conn连接对象自动序列化/反序列化总结
Jun 14 Golang
Go 内联优化让程序员爱不释手
Jun 21 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
资料注册后发信小技巧
2006/10/09 PHP
php下获取客户端ip地址的函数
2010/03/15 PHP
关于php内存不够用的快速解决方法
2013/10/26 PHP
PHP实现微信网页授权开发教程
2016/01/19 PHP
PHPUnit + Laravel单元测试常用技能
2019/11/06 PHP
Javascript 二维数组
2009/11/26 Javascript
javascript获取当前日期时间及其它操作函数
2011/01/11 Javascript
JS判断页面加载状态以及添加遮罩和缓冲动画的代码
2012/10/11 Javascript
JS之Date对象和获取系统当前时间详解
2014/01/13 Javascript
JavaScript设计模式之代理模式介绍
2014/12/28 Javascript
jQuery实现冻结表头的方法
2015/03/09 Javascript
javascript入门教程基础篇
2015/11/16 Javascript
全面解析Bootstrap表单使用方法(表单样式)
2015/11/24 Javascript
AngularJS中关于ng-class指令的几种实现方式详解
2016/09/17 Javascript
AngularJS ng-repeat指令及Ajax的应用实例分析
2017/07/06 Javascript
AngularJS路由删除#符号解决的办法
2017/09/28 Javascript
three.js利用卷积法如何实现物体描边效果
2019/11/27 Javascript
JS数组的常用10种方法详解
2020/05/08 Javascript
JavaScript 事件代理需要注意的地方
2020/09/08 Javascript
python输入整条数据分割存入数组的方法
2018/11/13 Python
python3 requests库实现多图片爬取教程
2019/12/18 Python
Python tensorflow实现mnist手写数字识别示例【非卷积与卷积实现】
2019/12/19 Python
基于python实现文件加密功能
2020/01/06 Python
PyCharm Anaconda配置PyQt5开发环境及创建项目的教程详解
2020/03/24 Python
Lululemon加拿大官网:加拿大知名体育服装零售商
2019/04/12 全球购物
J2EE是技术还是平台还是框架
2016/08/14 面试题
农民入党思想汇报
2014/01/03 职场文书
医院实习接收函
2014/01/12 职场文书
珍珠鸟教学反思
2014/02/01 职场文书
商业企业管理专业求职信
2014/07/10 职场文书
自愿离婚协议书范文2014
2014/10/12 职场文书
社区母亲节活动总结
2015/02/10 职场文书
2015年英语教学工作总结
2015/05/25 职场文书
2015年高中班级工作总结
2015/07/21 职场文书
北京大学中文系教授推荐的10本小说
2019/08/08 职场文书
使用HttpSessionListener监听器实战
2022/03/17 Java/Android