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语言map与string的相互转换的实现
Apr 07 Golang
golang goroutine顺序输出方式
Apr 29 Golang
golang日志包logger的用法详解
May 05 Golang
浅谈Golang 切片(slice)扩容机制的原理
Jun 09 Golang
Golang 语言控制并发 Goroutine的方法
Jun 30 Golang
Go语言空白表示符_的实例用法
Jul 04 Golang
手把手教你导入Go语言第三方库
Aug 04 Golang
Go语言基础函数基本用法及示例详解
Nov 17 Golang
Golang原生rpc(rpc服务端源码解读)
Apr 07 Golang
Golang数据类型和相互转换
Apr 12 Golang
Go 内联优化让程序员爱不释手
Jun 21 Golang
Go本地测试解耦任务拆解及沟通详解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快速url重写 更新版[需php 5.30以上]
2010/04/20 PHP
php实现的短网址算法分享
2014/06/20 PHP
PHP使用pear自带的mail类库发邮件的方法
2015/07/08 PHP
Yii全局函数用法示例
2017/01/22 PHP
js下弹出窗口的变通
2007/04/18 Javascript
JavaScript 实现??打印?理
2007/04/28 Javascript
Javascript 事件流和事件绑定
2009/07/16 Javascript
PPK 谈 JavaScript 的 this 关键字 [翻译]
2009/09/29 Javascript
window.location.hash 属性使用说明
2010/03/20 Javascript
利用JQuery动画制作滑动菜单项效果实现步骤及代码
2013/02/07 Javascript
jQuery中实现动画效果的基本操作介绍
2013/04/16 Javascript
限制textbox或textarea输入字符长度的JS代码
2013/10/16 Javascript
javascript中简单的进制转换代码实例
2013/10/26 Javascript
用Jquery实现滚动新闻
2014/02/12 Javascript
JavaScript多线程详解
2015/08/12 Javascript
JS身份证信息验证正则表达式
2017/06/12 Javascript
微信小程序使用image组件显示图片的方法【附源码下载】
2017/12/08 Javascript
通过jQuery学习js类型判断的技巧
2019/05/27 jQuery
npm全局环境变量配置详解
2020/12/15 Javascript
在Angular项目使用socket.io实现通信的方法
2021/01/05 Javascript
[01:49]一目了然!DOTA2DotA快捷操作对比第二弹
2014/05/16 DOTA
[38:23]完美世界DOTA2联赛循环赛 FTD vs PXG BO2第二场 11.01
2020/11/02 DOTA
[57:36]DOTA2-DPC中国联赛 正赛 SAG vs CDEC BO3 第三场 2月1日
2021/03/11 DOTA
Python中type的构造函数参数含义说明
2015/06/21 Python
完美解决python遍历删除字典里值为空的元素报错问题
2016/09/11 Python
Python如何为图片添加水印
2016/11/25 Python
Python if语句知识点用法总结
2018/06/10 Python
python 微信好友特征数据分析及可视化
2020/01/07 Python
Python网页解析器使用实例详解
2020/05/30 Python
阿里健康官方海外旗舰店:阿里健康国际自营
2017/11/24 全球购物
计划生育宣传标语
2014/06/21 职场文书
社区班子对照检查材料
2014/08/27 职场文书
向国旗敬礼活动总结范文2014
2014/09/27 职场文书
六查六看心得体会
2014/10/14 职场文书
写给同学的新学期寄语
2015/02/27 职场文书
MySQL 语句执行顺序举例解析
2022/06/05 MySQL