10 Go的映射
概述
在上一节的内容中,我们介绍了Go的结构体,包括:定义结构体、声明结构体变量、使用结构体、结构体关联函数、new、组合等。在本节中,我们将介绍Go的映射。Go语言中的映射(Map)是一种无序的键值对集合,使用关键字map来声明,并使用键和值类型作为参数。它是一个用于存储一系列无序的键值对的集合,基于键来存储值,键就像索引一样,指向与该键关联的值。
映射被创建和初始化后,可以通过指定适当类型的键并给这个键赋一个值来为映射赋值,每个键必须是唯一的。另外,映射是可变的,可以在已有的键值对基础上添加新的键值对。Go语言中映射的实现使用哈希表,因此它的操作是非常快速的。然而,由于映射是无序的,即使使用同样的顺序保存键值对,每次迭代映射的时候,顺序也有可能不一样。
声明映射
在Go语言中,映射的声明使用map关键字,并指定键和值的类型。以下是声明映射的语法:
var m map[keyType]valueType
其中,keyType表示键的类型,valueType表示值的类型。比如:要声明一个将字符串作为键、整数作为值的映射,可以参考下面的示例代码。
var m map[string]int
初始化映射
声明映射时,可以直接添加初始键值对,可参考下面的示例代码。
package mainimport "fmt"func main() {mapWebsite := map[string]int{"CSDN": 66,"GitHub": 88,}// 输出:map[CSDN:66 GitHub:88]fmt.Println(mapWebsite)
}
当然,也可以使用make函数来初始化映射。在下面的示例代码中,我们通过make函数创建了一个空的映射,可以在后续的代码中通过使用赋值操作来添加键值对。
package mainimport "fmt"func main() {mapWebsite := make(map[string]int)// 输出:map[]fmt.Println(mapWebsite)
}
注意:映射是引用类型,使用make函数分配的是一个引用,后续对映射的修改会影响到原始的映射对象。
操作映射
声明映射后,我们可以向映射中添加新的键值对,也可以访问和修改映射中的值。具体用法可参考下面的示例代码。
package mainimport "fmt"func main() {mapWebsite := make(map[string]int)// 添加新的键值对mapWebsite["CSDN"] = 66mapWebsite["GitHub"] = 88// 输出:map[CSDN:66 GitHub:88]fmt.Println(mapWebsite)// 访问键对应的值,输出:88fmt.Println(mapWebsite["GitHub"])mapWebsite["CSDN"] = 99// 修改键对应的值,输出:99fmt.Println(mapWebsite["CSDN"])
}
另外,我们可以使用len()函数获取映射的长度,使用delete()函数删除某个键值对。
package mainimport "fmt"func main() {mapWebsite := map[string]int{"CSDN": 66,"GitHub": 88,}// 输出:2fmt.Println(len(mapWebsite))delete(mapWebsite, "GitHub")// 输出:1fmt.Println(len(mapWebsite))
}
可以使用如下方式检查键是否存在于映射中:value, ok := mapName[key]。其中,mapName是映射的变量名,key是要检查的键。如果key存在于mapName中,那么value将是对应的值,并且ok将置为true;否则,value将是零值,并且ok将置为false。
package mainimport "fmt"func main() {mapWebsite := map[string]int{"CSDN": 66,"GitHub": 88,}value, ok := mapWebsite["CSDN"]if ok {// 输出:existed: 66fmt.Printf("existed: %d\n", value)} else {fmt.Println("not exist")}
}
要遍历map,我们可以使用range关键字。当遍历map时,range会返回两个值:键和对应的值。具体用法可参考下面的示例代码。
package mainimport "fmt"func main() {mapFruit := make(map[string]int)mapFruit["Apple"] = 66mapFruit["Banana"] = 88mapFruit["Orange"] = 99/* 遍历map,输出:Apple 66Banana 88Orange 99*/for key, value := range mapFruit {fmt.Println(key, value)}
}
相关文章:
10 Go的映射
概述 在上一节的内容中,我们介绍了Go的结构体,包括:定义结构体、声明结构体变量、使用结构体、结构体关联函数、new、组合等。在本节中,我们将介绍Go的映射。Go语言中的映射(Map)是一种无序的键值对集合&am…...

瑞萨e2studio(29)----SPI速率解析
瑞萨e2studio.29--SPI速率解析 概述视频教学时钟配置解析RA4M2的BRR值时钟速率7.5M下寄存器值3K下寄存器值 概述 在嵌入式系统的设计中,串行外设接口(SPI)的通信速率是一个关键参数,它直接影响到系统的性能和稳定性。瑞萨电子的…...

mysql的主从复制,读写分离
主从复制:主mysql的数据,新增,修改,表里的数据都会同步到从mysql上 主从复制的模式: 1 异步复制 mysql 的最常用的复制,只要执行完,客户端提交事务,主mysql 会立即把结果返回给从…...

小米路由器4A千兆版刷入OpenWRT并远程访问
小米路由器4A千兆版刷入OpenWRT并远程访问 文章目录 小米路由器4A千兆版刷入OpenWRT并远程访问前言1. 安装Python和需要的库2. 使用 OpenWRTInvasion 破解路由器3. 备份当前分区并刷入新的Breed4. 安装cpolar内网穿透4.1 注册账号4.2 下载cpolar客户端4.3 登录cpolar web ui管理…...
【golang】探索for-range遍历实现原理(slice、map、channel)
for-range for-range其实是正常for循环的一种语法糖,在go语言中可以遍历arr,slice,map和channel等数据结构,但是在一些初学者使用for-range可能会遇见很多坑,这篇文章会带你探索一下for-range中非常有趣的一些实现机制…...

MATLAB | 官方举办的动图绘制大赛 | 第一周赛情回顾
嘿真的又是很久没见了,最近确实有点非常很特别小忙,今天带来一下MATHWORKS官方举办的迷你黑客大赛第三期(MATLAB Flipbook Mini Hack)的最新进展!!目前比赛已经刚好进行了一周,前两届都要求提交280个字符内的代码来生成…...

适配器模式 rust和java的实现
文章目录 适配器模式介绍何时使用应用实例优点缺点使用场景 实现java实现rust 实现 rust代码仓库 适配器模式 适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能…...

竞赛 题目:垃圾邮件(短信)分类 算法实现 机器学习 深度学习 开题
文章目录 1 前言2 垃圾短信/邮件 分类算法 原理2.1 常用的分类器 - 贝叶斯分类器 3 数据集介绍4 数据预处理5 特征提取6 训练分类器7 综合测试结果8 其他模型方法9 最后 1 前言 🔥 优质竞赛项目系列,今天要分享的是 基于机器学习的垃圾邮件分类 该项目…...

wpf devexpress项目中添加GridControl绑定数据
本教程讲解了如何添加GridControl到wpf项目中并且绑定数据 原文地址Lesson 1 - Add a GridControl to a Project and Bind it to Data | WPF Controls | DevExpress Documentation 1、使用 DevExpress Template Gallery创建一个新的空白mvvm应用程序,这个项目包括了…...

2023亚太杯数学建模A题思路解析
文章目录 0 赛题思路1 竞赛信息2 竞赛时间3 建模常见问题类型3.1 分类问题3.2 优化问题3.3 预测问题3.4 评价问题 4 建模资料5 最后 0 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 1 竞赛信息 2023年第十三…...

Spark3.0中的AOE、DPP和Hint增强
1 Spark3.0 AQE Spark 在 3.0 版本推出了 AQE(Adaptive Query Execution),即自适应查询执行。AQE 是 Spark SQL 的一种动态优化机制,在运行时,每当 Shuffle Map 阶段执行完毕,AQE 都会结合这个阶段的统计信…...

算法笔记-第五章-质因子分解
算法笔记-第五章-质因子分解 小试牛刀质因子2的个数丑数 质因子分解最小最大质因子约数个数 小试牛刀 质因子2的个数 #include<cstdio> int main() {int n; scanf_s("%d", &n); int count 0; while (n % 2 0) {count; n / 2; }printf("%…...

适用于WPF的设计模式
适用于WPF的设计模式 讨论“XAML能不能写逻辑代码”这个问题。我发现这是个有歧义的问题。这个问题可以有两种意思: XAML能不能用来写逻辑代码? XAML文件里能不能包含逻辑代码? 对于第一种意思——XAML是一种声明性语言,就是用来…...
C++与多态
多态的本质是允许对象以其实际类型的行为方式来操作,而不仅仅是其静态类型所声明的方式。 多态是面向对象编程中的一种核心概念,它允许对象根据其具体类型执行相应的操作,而不是其声明的类型。我们可以使用一个经典的动物的例子来说明这一点。…...

ios 对话框UIAlertController放 tableview
//强弱引用 #define kWeakSelf(type)__weak typeof(type)weak##type type; -(void) showUIAlertTable {kWeakSelf(self)UIAlertController *alert [UIAlertController alertControllerWithTitle:NSLocalizedString("select_stu", nil) message:nil prefer…...
警告:新版Outlook会向微软发送密码、邮件和其他数据
新的免费Outlook会将敏感数据发送给 Microsoft。 在没有通知或询问的情况下,Microsoft 授予自己对新 Outlook 用户的 IMAP 和 SMTP 访问数据的完全访问权限。也就是说,当用户设置 IMAP 帐户时,新的 Outlook 会将访问数据和服务器信息发送给 …...
数据结构C语言--基础实验
实验1 线性表的顺序实现 1.!顺序表的倒置 /**********************************/ /*文件名称:lab1-01.c */ /**********************************/ /*基于sequlist.h中定义的顺序表,编写算法函数reverse(sequence_list *L)&…...

wireshark抓包并进行Eigrp网络协议分析
路由协议 Eigrp EIGRP:Enhanced Interior Gateway Routing Protocol 即 增强内部网关路由协议。也翻译为 加强型内部网关路由协议。 EIGRP是Cisco公司的私有协议(2013年已经公有化)。 EIGRP结合了链路状态和距离矢量型路由选择协议的Cisco专用协议&a…...

力扣刷题-二叉树-二叉树的层序遍历(相关题目总结)
思路 层序遍历一个二叉树。就是从左到右一层一层的去遍历二叉树。这种遍历的方式和我们之前讲过的都不太一样。 需要借用一个辅助数据结构即队列来实现,队列先进先出,符合一层一层遍历的逻辑,而用栈先进后出适合模拟深度优先遍历也就是递归的…...
KubeSphere 容器平台高可用:环境搭建与可视化操作指南
Linux_k8s篇 欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神! 题目:KubeSphere 容器平台高可用:环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...

相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了: 这一篇我们开始讲: 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下: 一、场景操作步骤 操作步…...
【Linux】C语言执行shell指令
在C语言中执行Shell指令 在C语言中,有几种方法可以执行Shell指令: 1. 使用system()函数 这是最简单的方法,包含在stdlib.h头文件中: #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...

python/java环境配置
环境变量放一起 python: 1.首先下载Python Python下载地址:Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个,然后自定义,全选 可以把前4个选上 3.环境配置 1)搜高级系统设置 2…...

P3 QT项目----记事本(3.8)
3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...
sqlserver 根据指定字符 解析拼接字符串
DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...
Robots.txt 文件
什么是robots.txt? robots.txt 是一个位于网站根目录下的文本文件(如:https://example.com/robots.txt),它用于指导网络爬虫(如搜索引擎的蜘蛛程序)如何抓取该网站的内容。这个文件遵循 Robots…...
docker 部署发现spring.profiles.active 问题
报错: org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property spring.profiles.active imported from location class path resource [application-test.yml] is invalid in a profile specific resource [origin: class path re…...

技术栈RabbitMq的介绍和使用
目录 1. 什么是消息队列?2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...

GO协程(Goroutine)问题总结
在使用Go语言来编写代码时,遇到的一些问题总结一下 [参考文档]:https://www.topgoer.com/%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B/goroutine.html 1. main()函数默认的Goroutine 场景再现: 今天在看到这个教程的时候,在自己的电…...