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 相关文章推荐
golang正则之命名分组方式
Apr 25 Golang
go语言求任意类型切片的长度操作
Apr 26 Golang
浅谈Golang 嵌套 interface 的赋值问题
Apr 29 Golang
使用Golang的channel交叉打印两个数组的操作
Apr 29 Golang
golang 比较浮点数的大小方式
May 02 Golang
go语言使用Casbin实现角色的权限控制
Jun 26 Golang
Go 语言结构实例分析
Jul 04 Golang
Go中的条件语句Switch示例详解
Aug 23 Golang
victoriaMetrics库布隆过滤器初始化及使用详解
Apr 05 Golang
Go并发4种方法简明讲解
Apr 06 Golang
Golang 实现 WebSockets 之创建 WebSockets
Apr 24 Golang
基于Python实现西西成语接龙小助手
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 htmlentities和htmlspecialchars 的区别
2008/08/18 PHP
PHP中的socket_read和socket_recv区别详解
2015/02/09 PHP
PHP 正则表达式小结
2015/02/12 PHP
PHP使用Nginx实现反向代理
2017/09/20 PHP
jquery 图片轮换效果
2010/07/29 Javascript
js网页侧边随页面滚动广告效果实现
2011/04/14 Javascript
巧用jquery解决下拉菜单被Div遮挡的相关问题
2014/02/13 Javascript
JS中操作JSON总结
2020/12/06 Javascript
js拼接html字符串的注意事项
2016/10/13 Javascript
javascript 秒表计时器实现代码
2017/03/09 Javascript
JS实现队列的先进先出功能示例
2017/05/10 Javascript
jQuery实现的鼠标滚轮控制图片缩放功能实例
2017/10/14 jQuery
JS实现将对象转化为数组的方法分析
2019/01/21 Javascript
微信小程序传值以及获取值方法的详解
2019/04/29 Javascript
微信小程序吸底区域适配iPhoneX的实现
2020/04/09 Javascript
jQuery实现移动端图片上传预览组件的方法分析
2020/05/01 jQuery
vue修改Element的el-table样式的4种方法
2020/09/17 Javascript
[01:02:46]VGJ.S vs NB 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
python装饰器与递归算法详解
2016/02/18 Python
python中 logging的使用详解
2017/10/25 Python
Python图像处理之图像的缩放、旋转与翻转实现方法示例
2019/01/04 Python
python3实现高效的端口扫描
2019/08/31 Python
Keras SGD 随机梯度下降优化器参数设置方式
2020/06/19 Python
Python延迟绑定问题原理及解决方案
2020/08/04 Python
cf战队收人口号
2014/06/21 职场文书
2014教师年度思想工作总结
2014/11/10 职场文书
2014年信访维稳工作总结
2014/12/08 职场文书
全陪导游词开场白
2015/05/29 职场文书
教师节座谈会主持词
2015/07/03 职场文书
2016大学生暑期三下乡心得体会
2016/01/23 职场文书
年会邀请函的格式及范文五篇
2019/11/02 职场文书
pytorch实现手写数字图片识别
2021/05/20 Python
vue点击弹窗自动触发点击事件的解决办法(模拟场景)
2021/05/25 Vue.js
各种货币符号快捷输入
2022/02/17 杂记
win10拖拽文件时崩溃怎么解决?win10文件不能拖拽问题解决方法
2022/08/14 数码科技