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语言中切片与内存复制 memcpy 的实现操作
Apr 27 Golang
golang通过递归遍历生成树状结构的操作
Apr 28 Golang
基于Go Int转string几种方式性能测试
Apr 28 Golang
Golang 获取文件md5校验的方法以及效率对比
May 08 Golang
go语言基础 seek光标位置os包的使用
May 09 Golang
Golang标准库syscall详解(什么是系统调用)
May 25 Golang
Go 语言下基于Redis分布式锁的实现方式
Jun 28 Golang
一文搞懂Golang 时间和日期相关函数
Dec 06 Golang
简单聊聊Golang中defer预计算参数
Mar 25 Golang
详解Go语言中配置文件使用与日志配置
Jun 01 Golang
Go调用Rust方法及外部函数接口前置
Jun 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
德劲1107的电路分析与打磨
2021/03/02 无线电
php设计模式 FlyWeight (享元模式)
2011/06/26 PHP
Smarty变量调节器失效的解决办法
2014/08/20 PHP
php关联数组快速排序的方法
2015/04/17 PHP
php实现微信公众号主动推送消息
2015/12/31 PHP
php仿微信红包分配算法的实现方法
2016/05/13 PHP
PHP将身份证正反面两张照片合成一张图片的代码
2017/04/08 PHP
PHP5.6.8连接SQL Server 2008 R2数据库常用技巧分析总结
2019/05/06 PHP
JCalendar 日历控件 v1.0 beta[兼容IE&Firefox] 有文档和例子
2007/05/30 Javascript
jQuery实现等比例缩放大图片让大图片自适应页面布局
2013/10/16 Javascript
jQuery实现Select左右复制移动内容
2016/08/05 Javascript
AngularJS表单验证功能分析
2017/05/26 Javascript
jackson解析json字符串,首字母大写会自动转为小写的方法
2017/12/22 Javascript
vue+node实现图片上传及预览的示例方法
2018/11/22 Javascript
jQuery实现checkbox全选、反选及删除等操作的方法详解
2019/08/02 jQuery
layer扩展打开/关闭动画的方法
2019/09/23 Javascript
vue.js click点击事件获取当前元素对象的操作
2020/08/07 Javascript
[02:08:58]2014 DOTA2国际邀请赛中国区预选赛 Ne VS CIS
2014/05/22 DOTA
[01:09:19]DOTA2-DPC中国联赛 正赛 VG vs Aster BO3 第二场 2月28日
2021/03/11 DOTA
python 自动提交和抓取网页
2009/07/13 Python
Flask框架的学习指南之开发环境搭建
2016/11/20 Python
Python3随机漫步生成数据并绘制
2018/08/27 Python
python中的Elasticsearch操作汇总
2019/10/30 Python
python实现测试工具(一)——命令行发送get请求
2020/10/19 Python
pandas map(),apply(),applymap()区别解析
2021/02/24 Python
Dodax奥地利:音乐、电影、书籍、玩具、电子产品等
2019/08/31 全球购物
办公室前台的岗位职责
2013/12/20 职场文书
关爱留守儿童倡议书
2014/04/15 职场文书
2014最新党员批评与自我批评材料
2014/09/24 职场文书
农民工工资支付承诺书
2015/05/04 职场文书
灵魂歌王观后感
2015/06/17 职场文书
学习杨善洲同志先进事迹心得体会
2016/01/23 职场文书
《风筝》教学反思
2016/02/23 职场文书
Sql-Server数据库单表查询 4.3实验课
2021/04/05 SQL Server
MySQL 8.0 驱动与阿里druid版本兼容问题解决
2021/07/01 MySQL
python实现会员管理系统
2022/03/18 Python