Go语言 字典(map)

本文主要为Go语言数据类型-字典(map)定义、特性及其示例整理的学习笔记。

目录

字典(map)

定义字典

分配空间

未分配空间直接赋值

分配空间及赋值

分配空间但不指定长度

定义时分配空间

遍历

判断key是否存在

访问不存在的key

通过ok判断key是否存在

删除元素

总结


字典(map)

哈希表,key=>value,存储的key是经过哈希运算的

定义字典

定义一个学生信息字典。

示例如下:

package mainimport "fmt"func main() {// 定义一个学生信息字典// key是学生id =》 学生姓名var idNames map[int]string // 定义一个map,此时的map不能直接赋值的,它是空的
}

 

分配空间

使用map之前,一定要对map手动进行分配空间

若不分配空间直接使用,程序会抛出异常。

未分配空间直接赋值

示例如下:

// 赋值
idNames[0] = "张三"
idNames[1] = "李四"

抛出异常:

panic: assignment to entry in nil mapgoroutine 1 [running]:
main.main()E:/gowork/src/字典.go:11 +0x2a

 

分配空间及赋值

对学生信息字典赋值前,增加分配空间操作。

示例如下:

// 分配空间
idNames = make(map[int]string, 10)// 赋值
idNames[0] = "张三"
idNames[1] = "李四"

运行不在抛出异常。

分配空间但不指定长度

分配空间使用make,可以不指定长度,但是建议直接指定长度,性能会更好。

示例如下:

idNames = make(map[int]string)

 

定义时分配空间

也可以在定义时直接分配空间,防止定义后忘记分配空间导致抛出异常。

这种方式在日常使用中比较常见。

示例如下:

idName1 := make(map[int]string, 10)

遍历

对map进行遍历

示例如下:

for key, val := range idNames {fmt.Println(key, "=>", val)
}

 

判断key是否存在

访问不存在的key

如果判断一个key是否存在map中。

在map中不存在访问越界的问题,它认为所有的key都是有效的。

所以如果访问一个不存在的key并不会崩溃或者抛出异常,

只会返回这个类型的零值。

零值:bool => false, 数字 => 0,字符串 => 空

示例如下:

name12 := idNames[12]
fmt.Println("name1:", name12)

 

通过ok判断key是否存在

无法通过获取value来判断一个key是否存在,

因此我们需要一个能够校验key是否存在的方式

我们可以通过ok方式来进行判断。

如果key存在,那么value就是key对应的值,ok返回true;反之返回零值,ok返回false。

示例如下:

value, ok := idNames[12]
if ok {fmt.Println("id=12这个key存在,value为:", value)
} else {fmt.Println("id=12这个key不存在")
}

 

删除元素

使用自由函数delete来删除map中指定key

删除存在和不存在的key

示例如下:

fmt.Println("idNames删除前:", idNames)
delete(idNames, 1)
delete(idNames, 15)
fmt.Println("idNames删除后:", idNames)

运行结果:

idNames删除前: map[0:张三 1:李四]
idNames删除后: map[0:张三]

总结

本文主要为Go语言数据类型-字典(map)定义、特性及其示例整理的学习笔记。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/48477.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【 DHT11 温湿度传感器】使用STC89C51读取发送到串口、通过时序图编写C语言

文章目录 DHT11 温湿度传感器概述接线数据传送通讯过程时序图检测模块是否存在 代码实现总结对tmp tmp << 1;的理解对sendByte(datas[0]/10 0x30);的理解 DHT11 温湿度传感器 使用80C51单片机通过读取HDT11温湿度传感的数据&#xff0c;发送到串口。 通过时序图编写相应…

微信小程序数组绑定使用案例(一)

微信小程序数组绑定案例&#xff0c;修改数组中的值 1.Wxml 代码 <view class"list"><view class"item {{item.ischeck?active:}}" wx:for"{{list}}"><view class"title">{{item.name}} <text>({{item.id}…

Redis7(二)Redis持久化双雄

持久化之RDB RDB的持久化方式是在指定时间间隔&#xff0c;执行数据集的时间点快照。也就是在指定的时间间隔将内存中的数据集快照写入磁盘&#xff0c;也就是Snapshot内存快照&#xff0c;它恢复时再将硬盘快照文件直接读回到内存里面。 RDB保存的是dump.rdb文件。 自动触发…

昇思25天学习打卡营第25天|MindNLP ChatGLM-6B StreamChat

配置环节 %%capture captured_output !pip uninstall mindspore -y !pip install -i https://pypi.mirrors.ustc.edu.cn/simple mindspore2.2.14 !pip install mindnlp !pip install mdtex2html配置国内镜像 !export HF_ENDPOINThttps://hf-mirror.com下载与加载模型 from m…

【计算机视觉】siamfc论文复现实现目标追踪

什么是目标跟踪 使用视频序列第一帧的图像(包括bounding box的位置)&#xff0c;来找出目标出现在后序帧位置的一种方法。 什么是孪生网络结构 孪生网络结构其思想是将一个训练样本(已知类别)和一个测试样本(未知类别)输入到两个CNN(这两个CNN往往是权值共享的)中&#xff0…

代码解读:Diffusion Models中的长宽桶技术(Aspect Ratio Bucketing)

Diffusion Models专栏文章汇总&#xff1a;入门与实战 前言&#xff1a;自从SDXL提出了长宽桶技术之后&#xff0c;彻底解决了不同长宽比的图像输入问题&#xff0c;现在已经成为训练扩散模型必选的方案。这篇博客从代码详细解读如何在模型训练的时候运用长宽桶技术(Aspect Rat…

【机器学习】-- SVM核函数(超详细解读)

支持向量机&#xff08;SVM&#xff09;中的核函数是支持向量机能够处理非线性问题并在高维空间中学习复杂决策边界的关键。核函数在SVM中扮演着将输入特征映射到更高维空间的角色&#xff0c;使得原始特征空间中的非线性问题在高维空间中变得线性可分。 一、SVM是什么&#x…

Android init.rc各阶段的定义和功能

Android开机优化系列文档-CSDN博客 Android 14 开机时间优化措施汇总-CSDN博客Android 14 开机时间优化措施-CSDN博客根据systrace报告优化系统时需要关注的指标和优化策略-CSDN博客Android系统上常见的性能优化工具-CSDN博客Android上如何使用perfetto分析systrace-CSDN博客A…

时间卷积网络(TCN):序列建模的强大工具(附Pytorch网络模型代码)

这里写目录标题 1. 引言2. TCN的核心特性2.1 序列建模任务描述2.2 因果卷积2.3 扩张卷积2.4 残差连接 3. TCN的网络结构4. TCN vs RNN5. TCN的应用TCN的实现 1. 引言 引用自&#xff1a;Bai S, Kolter J Z, Koltun V. An empirical evaluation of generic convolutional and re…

Linux系统之部署扫雷小游戏(三)

Linux系统之部署扫雷小游戏(三) 一、小游戏介绍1.1 小游戏简介1.2 项目预览二、本次实践介绍2.1 本地环境规划2.2 本次实践介绍三、检查本地环境3.1 检查系统版本3.2 检查系统内核版本3.3 检查软件源四、安装Apache24.1 安装Apache2软件4.2 启动apache2服务4.3 查看apache2服…

大厂生产解决方案:泳道隔离机制

更多大厂面试内容可见 -> http://11come.cn 大厂生产解决方案&#xff1a;泳道隔离机制 背景 在公司中&#xff0c;由于项目多、开发人员多&#xff0c;一般会有多套测试环境&#xff08;可以理解为多个服务器&#xff09;&#xff0c;同一套服务会在多套测试环境中都部署…

《逻辑003:实现request接口获取数据》

描述&#xff1a;在开发小程序过程中&#xff0c;发现一些不错的案例&#xff0c;平时使用也比较多&#xff0c;稍微总结了下经验&#xff0c;以下内容可以直接复制使用&#xff0c;希望对大家有所帮助&#xff0c;废话不多说直接上干货&#xff01; 一、实现request接口获取数…

如何解决微服务下引起的 分布式事务问题

一、什么是分布式事务&#xff1f; 虽然叫分布式事务&#xff0c;但不是一定是分布式部署的服务之间才会产生分布式事务。不是在同一个服务或同一个数据库架构下&#xff0c;产生的事务&#xff0c;也就是分布式事务。 跨数据源的分布式事务 跨服务的分布式事务 二、解决方…

【适合初学者】这可能是全网最简单的Bert代码学习

最简单的Bert代码学习 教程数据集说明建立词表任务一&#xff1a;随机mask并预测重建举例说明构建输入构建目标segment_label 随机mask的具体实现 任务二&#xff1a;预测两个子句是否来自同一个句子举例说明构建输入构建目标 随机选择子句的实现方式 BERT模型输入生成mask三种…

配置服务器

参考博客 1. https://blog.csdn.net/qq_31278903/article/details/83146031 2. https://blog.csdn.net/u014374826/article/details/134093409 3. https://blog.csdn.net/weixin_42728126/article/details/88887350 4. https://blog.csdn.net/Dreamhai/article/details/109…

JS设计模式(一)单例模式

注释很详细&#xff0c;直接上代码 本文建立在已有JS面向对象基础的前提下&#xff0c;若无&#xff0c;请移步以下博客先行了解 JS面向对象&#xff08;一&#xff09;类与对象写法 特点和用途&#xff1a; 全局访问点&#xff1a;通过单例模式可以在整个应用程序中访问同一个…

了解 JSON Web 令牌 (JWT)

一. 介绍 在现代 Web 开发领域&#xff0c;确保客户端和服务器之间的通信安全至关重要。JSON Web Tokens (JWT) 已成为确保安全高效数据交换的流行解决方案。本文将深入探讨 JWT 是什么、它们的工作原理以及它们为何对于 Web 应用程序中的安全身份验证和授权至关重要。 二. 什…

AWS全服务历史年表:发布日期、GA和服务概述一览(二)

我一直在尝试从各种角度撰写关于Amazon Web Services&#xff08;AWS&#xff09;的信息和魅力。由于我喜欢技术历史&#xff0c;这次我总结了AWS服务发布的历史年表。 虽然AWS官方也通过“Whats New”发布了官方公告&#xff0c;但我一直希望能有一篇文章将公告日期、GA日期&…

javac详解 idea maven内部编译原理 自制编译器

起因 不知道大家在开发中&#xff0c;有没有过下面这些疑问。有的话&#xff0c;今天就一次解答清楚。 如何使用javac命令编译一个项目&#xff1f;java或者javac的一些参数到底有什么用&#xff1f;idea或者maven是如何编译java项目的&#xff1f;&#xff08;你可能猜测底层…

【一刷《剑指Offer》】面试题 47:不用加减乘除做加法

力扣对应题目链接&#xff1a;LCR 190. 加密运算 - 力扣&#xff08;LeetCode&#xff09; 牛客对应题目链接&#xff1a;不用加减乘除做加法_牛客题霸_牛客网 (nowcoder.com) 一、《剑指Offer》对应内容 二、分析题目 sumdataA⊕dataB 非进位和&#xff1a;异或运…