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 24 Golang
Go缓冲channel和非缓冲channel的区别说明
Apr 25 Golang
go原生库的中bytes.Buffer用法
Apr 25 Golang
golang 实现Location跳转方式
May 02 Golang
goland设置颜色和字体的操作
May 05 Golang
解决golang 关于全局变量的坑
May 06 Golang
go goroutine 怎样进行错误处理
Jul 16 Golang
golang生成vcf通讯录格式文件详情
Mar 25 Golang
Golang数据类型和相互转换
Apr 12 Golang
golang连接MySQl使用sqlx库
Apr 14 Golang
Golang 字符串的常见操作
Apr 19 Golang
Go语言编译原理之源码调试
Aug 05 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相关资料
2006/10/09 PHP
PHP实现的连贯操作、链式操作实例
2014/07/08 PHP
PHP实现批量上传单个文件
2015/12/29 PHP
PHP接口继承及接口多继承原理与实现方法详解
2017/10/18 PHP
PHP使用两个栈实现队列功能的方法
2018/01/15 PHP
PHP合并两个或多个数组的方法
2019/01/20 PHP
php写app用的框架整理
2019/09/29 PHP
确保Laravel网站不会被嵌入到其他站点中的方法
2019/10/18 PHP
js本身的局限性 别让javascript做太多事
2010/03/23 Javascript
无刷新预览所选择的图片示例代码
2014/04/02 Javascript
javascript页面渲染速度测试脚本分享
2014/04/15 Javascript
浅谈JS封闭函数、闭包、内置对象
2017/07/18 Javascript
js/jquery遍历对象和数组的方法分析【forEach,map与each方法】
2019/02/27 jQuery
使用taro开发微信小程序遇到的坑总结
2019/04/08 Javascript
es6 for循环中let和var区别详解
2020/01/12 Javascript
微信小程序 bindtap 传参的实例代码
2020/02/21 Javascript
vue中实现弹出层动画效果的示例代码
2020/09/25 Javascript
Golang与python线程详解及简单实例
2017/04/27 Python
Python基础知识_浅谈用户交互
2017/05/31 Python
python爬取内容存入Excel实例
2019/02/20 Python
PySide和PyQt加载ui文件的两种方法
2019/02/27 Python
selenium处理元素定位点击无效问题
2019/06/12 Python
python傅里叶变换FFT绘制频谱图
2019/07/19 Python
flask的orm框架SQLAlchemy查询实现解析
2019/12/12 Python
Python安装依赖(包)模块方法详解
2020/02/14 Python
Python3爬虫中识别图形验证码的实例讲解
2020/07/30 Python
详解HTML5 Canvas标签及基本使用
2020/01/10 HTML / CSS
印尼综合在线预订网站:Tiket.com(机票、酒店、火车、租车和娱乐)
2018/10/11 全球购物
个人自我鉴定写法
2013/11/30 职场文书
企业统计员岗位职责
2013/12/13 职场文书
3的组成教学反思
2014/04/30 职场文书
2015年敬老院工作总结
2015/05/18 职场文书
2016教师廉洁教育心得体会
2016/01/13 职场文书
预防职务犯罪警示教育心得体会
2016/01/15 职场文书
在HTML5 localStorage中存储对象的示例代码
2021/04/21 Javascript
MySQL 用 limit 为什么会影响性能
2021/09/15 MySQL