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 Gin实现文件上传下载的示例代码
Apr 02 Golang
用golang如何替换某个文件中的字符串
Apr 25 Golang
Go 语言结构实例分析
Jul 04 Golang
golang语言指针操作
Apr 14 Golang
Golang Elasticsearches 批量修改查询及发送MQ
Apr 19 Golang
Golang获取List列表元素的四种方式
Apr 20 Golang
Golang日志包的使用
Apr 20 Golang
Golang ort 中的sortInts 方法
Apr 24 Golang
Golang 实现WebSockets
Apr 24 Golang
详解Go语言中配置文件使用与日志配置
Jun 01 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
PHP连接SQLServer2005的方法
2015/01/27 PHP
CodeIgniter框架数据库基本操作示例
2018/05/24 PHP
javascript整除实现代码
2010/11/23 Javascript
JS替换字符串中空格方法
2015/04/17 Javascript
js多功能分页组件layPage使用方法详解
2016/05/19 Javascript
微信小程序 参数传递详解
2016/10/24 Javascript
JS中事件冒泡和事件捕获介绍
2016/12/13 Javascript
移动端效果之IndexList详解
2017/10/20 Javascript
详解react-native WebView 返回处理(非回调方法可解决)
2018/02/27 Javascript
详解AngularJS 过滤器的使用
2018/06/02 Javascript
JavaScript简单实现的仿微博留言功能示例
2019/01/17 Javascript
微信自定义分享链接信息(标题,图片和内容)实现过程详解
2019/09/04 Javascript
微信小程序 自定义弹窗实现过程(附代码)
2019/12/05 Javascript
通过实例了解Nodejs模块系统及require机制
2020/07/16 NodeJs
[02:56]DOTA2英雄基础教程 巨魔战将
2013/12/10 DOTA
[10:18]2018DOTA2国际邀请赛寻真——Fnatic能否笑到最后?
2018/08/14 DOTA
[02:08]什么藏在DOTA2 TI9“小紫本”里?斧王历险记告诉你!
2019/05/17 DOTA
python简单判断序列是否为空的方法
2015/06/30 Python
学习python之编写简单乘法口诀表实现代码
2016/02/27 Python
python实现生命游戏的示例代码(Game of Life)
2018/01/24 Python
python selenium 获取标签的属性值、内容、状态方法
2018/06/22 Python
Python django使用多进程连接mysql错误的解决方法
2018/10/08 Python
Python----数据预处理代码实例
2019/03/20 Python
python实现的爬取电影下载链接功能示例
2019/08/26 Python
Python scrapy增量爬取实例及实现过程解析
2019/12/24 Python
python实现猜数游戏
2020/03/27 Python
Python telnet登陆功能实现代码
2020/04/16 Python
使用openCV去除文字中乱入的线条实例
2020/06/02 Python
Chicco婴儿用品美国官网:汽车座椅、婴儿推车、高脚椅等
2018/11/05 全球购物
C语言面试题
2013/05/19 面试题
业务主管岗位职责
2013/11/20 职场文书
环保专业大学生职业规划设计
2014/01/10 职场文书
关于工作时间玩手机的检讨书
2014/09/18 职场文书
《世界多美呀》教学反思
2016/02/22 职场文书
openstack中的rpc远程调用的方法
2021/07/09 Python
微软发布Windows 11今年最大更新22H2(附 ISO 镜像官方下载)
2022/09/23 数码科技