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 21 Golang
golang 实现两个结构体复制字段
Apr 28 Golang
go设置多个GOPATH的方式
May 05 Golang
goland 设置project gopath的操作
May 06 Golang
Golang中channel的原理解读(推荐)
Oct 16 Golang
Go语言实现一个简单的并发聊天室的项目实战
Mar 18 Golang
golang语言指针操作
Apr 14 Golang
golang的文件创建及读写操作
Apr 14 Golang
Golang map映射的用法
Apr 22 Golang
Golang gRPC HTTP协议转换示例
Jun 16 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去除字符串中空字符的常用方法小结
2015/03/17 PHP
基于php实现的验证码小程序
2016/12/13 PHP
PHP编程实现多维数组按照某个键值排序的方法小结【2种方法】
2017/04/27 PHP
PHP中Notice错误常见解决方法
2017/04/28 PHP
php实现用户注册密码的crypt加密
2017/06/08 PHP
PHP进阶学习之命名空间基本用法分析
2019/06/18 PHP
PHP中有关长整数的一些操作教程
2019/09/11 PHP
JS 继承实例分析
2008/11/04 Javascript
ext读取两种结构的xml的代码
2008/11/05 Javascript
Javascript 函数中的参数使用分析
2010/03/27 Javascript
使用js实现按钮控制文本框加1减1应用于小时+分钟
2013/12/09 Javascript
WebSocket+node.js创建即时通信的Web聊天服务器
2016/08/08 Javascript
jQuery中的select操作详解
2016/11/29 Javascript
基于JS实现移动端向左滑动出现删除按钮功能
2017/02/22 Javascript
nodejs批量下载图片的实现方法
2017/05/19 NodeJs
Spring Boot/VUE中路由传递参数的实现代码
2018/03/02 Javascript
js动态获取时间的方法分析
2019/08/02 Javascript
关于vue路由缓存清除在main.js中的设置
2019/11/06 Javascript
Angular8引入百度Echarts进行图表分析的实现代码
2019/11/27 Javascript
[38:32]完美世界DOTA2联赛循环赛 Forest vs DM 第二场 11.06
2020/11/06 DOTA
python实现requests发送/上传多个文件的示例
2018/06/04 Python
python获取命令行输入参数列表的实例代码
2018/06/23 Python
Django 路由系统URLconf的使用
2018/10/11 Python
解决python3 pika之连接断开的问题
2018/12/18 Python
python3使用matplotlib绘制散点图
2019/03/19 Python
pyecharts调整图例与各板块的位置间距实例
2020/05/16 Python
浅析python 字典嵌套
2020/09/29 Python
意大利制造的男鞋和女鞋:SCAROSSO
2018/03/07 全球购物
美国运动鞋和服装网上商店:YCMC
2018/09/15 全球购物
介绍一下Python中webbrowser的用法
2013/05/07 面试题
运动会闭幕式解说词
2014/02/21 职场文书
好习惯伴我成长演讲稿
2014/05/21 职场文书
环保公益策划方案
2014/08/15 职场文书
2014年民主评议党员工作总结
2014/12/02 职场文书
python 如何在 Matplotlib 中绘制垂直线
2021/04/02 Python
vue-cropper插件实现图片截取上传组件封装
2021/05/27 Vue.js