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:垃圾回收GC触发条件详解
Apr 24 Golang
goland 恢复已更改文件的操作
Apr 28 Golang
Go使用协程交替打印字符
Apr 29 Golang
使用Golang的channel交叉打印两个数组的操作
Apr 29 Golang
详解Go语言Slice作为函数参数的使用
Jul 02 Golang
golang 语言中错误处理机制
Aug 30 Golang
golang操作rocketmq的示例代码
Apr 06 Golang
Golang数据类型和相互转换
Apr 12 Golang
golang使用map实现去除重复数组
Apr 14 Golang
Golang 遍历二叉树
Apr 19 Golang
Go获取两个时区的时间差
Apr 20 Golang
Go中使用gjson来操作JSON数据的实现
Aug 14 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 登录完成后如何跳转上一访问页面
2014/01/14 PHP
PHP中使用GD库绘制折线图 折线统计图的绘制方法
2015/11/09 PHP
YII CLinkPager分页类扩展增加显示共多少页
2016/01/29 PHP
PHP使用内置函数生成图片的方法详解
2016/05/09 PHP
NodeJs中的非阻塞方法介绍
2012/06/05 NodeJs
javascrip关于继承的小例子
2013/05/10 Javascript
Angular Js文件上传之form-data
2015/08/28 Javascript
javascript动画系列之模拟滚动条
2016/12/13 Javascript
浅谈javascript中的 “ && ” 和 “ || ”
2017/02/02 Javascript
使用gulp搭建本地服务器并实现模拟ajax
2017/04/05 Javascript
Vue侧滑菜单组件——DrawerLayout
2017/12/18 Javascript
Vuex持久化插件(vuex-persistedstate)解决刷新数据消失的问题
2019/04/16 Javascript
ES6小技巧之代替lodash
2019/06/07 Javascript
layui实现左侧菜单点击右侧内容区显示
2019/07/26 Javascript
javascript json对象小技巧之键名作为变量用法分析
2019/11/11 Javascript
vue中注册自定义的全局js方法
2019/11/15 Javascript
[03:56]还原FTP电影首映式 DOTA2群星拼出遗迹世界
2014/03/26 DOTA
python中getattr函数使用方法 getattr实现工厂模式
2014/01/20 Python
Python实现判断给定列表是否有重复元素的方法
2018/04/11 Python
关于Tensorflow中的tf.train.batch函数的使用
2018/04/24 Python
Python3 读、写Excel文件的操作方法
2018/10/20 Python
使用python判断你是青少年还是老年人
2018/11/29 Python
解决py2exe打包后,总是多显示一个DOS黑色窗口的问题
2019/06/21 Python
Python正则表达式高级使用方法汇总
2020/06/18 Python
Python本地及虚拟解释器配置过程解析
2020/10/13 Python
Pycharm制作搞怪弹窗的实现代码
2021/02/19 Python
德国在线购买葡萄酒网站:Geile Weine
2019/09/24 全球购物
医学类导师推荐信范文
2013/11/19 职场文书
大学生2014全国两会学习心得体会
2014/03/10 职场文书
合同协议书格式
2014/04/18 职场文书
2014年环卫工作总结
2014/11/22 职场文书
综合测评自我评价
2015/03/06 职场文书
学生会干部任命书
2015/09/21 职场文书
教师远程研修感悟
2015/11/18 职场文书
golang中的struct操作
2021/11/11 Golang
Docker 镜像介绍以及commit相关操作
2022/04/13 Servers