GO语言:map的使用

整个程序首先创建并初始化了一个映射,然后向其中添加了五个学生的名字和分数,最后遍历这个映射并输出每个学生的名字和分数

package main
import "fmt"
//创建、填充并遍历一个映射(map),映射的键(key)是字符串类型,代表学生的名字,
//                                值(value)是整型,代表学生的分数.
func main() {//students := make(map[string]int)   // 创建一个空的mapvar students map[string]int   //声明了一个名为students的变量,类型为map[string]int,此时students是nil,还没有初始化。students = make(map[string]int, 3)   //使用make函数初始化了students映射,并指定了初始容量为3。尽管最终存储了5个元素,但这不会引起问题,因为Go语言会自动扩展映射的容量。// 添加学生及其分数到map中students["Alice"] = 85  //向students映射中添加了一个键值对,键是"Alice",值是85。students["Bob"] = 92students["Charlie"] = 78students["David"] = 90students["Eve"] = 88// 遍历map并输出每个学生的分数for name, score := range students {  //使用for循环和range关键字遍历students映射。每次迭代都会返回一对键值。fmt.Printf("%s 的分数是 %d\n", name, score)  //使用fmt.Printf函数格式化输出每个学生的名字和分数。%s用于字符串,%d用于整数。}
}

两段代码都是在Go语言中创建并初始化一个映射(map),映射的键(key)类型是string,值(value)类型是int。不过,它们在声明和初始化的方式上有所不同:

	students := make(map[string]int)  
  1. 直接使用make函数初始化映射:这行代码同时完成了映射的声明和初始化。students是通过:=操作符声明的,它的类型是通过make函数的返回值推断出来的,即map[string]int。这里没有指定映射的初始容量,Go会根据映射的使用情况自动进行内存分配。
var students map[string]int   students = make(map[string]int, 3)   
  1. 分步声明和使用make函数指定初始容量初始化映射:
    这两行代码分别完成了映射的声明和初始化。首先,使用var关键字声明了一个名为students的变量,其类型为map[string]int,此时students是一个nil映射。然后,使用make函数初始化这个映射,并指定了一个初始容量(capacity)为5。指定容量是一个性能优化,如果你提前知道将要存储的键值对数量,这可以帮助减少随着元素添加时内部数据结构重新分配内存的次数。

区别总结:

1.第一种方式是声明并立即初始化映射的简写形式,不指定初始容量。
2.第二种方式是分步进行,允许在声明和初始化之间执行其他操作,且在初始化时指定了映射的初始容量。指定初始容量是可选的,主要用于性能优化。如果你对将要存储的元素数量有大致估计,预先指定一个容量可以减少后续动态扩容的次数,从而提高程序性能。

问题:如果我写了一个5 最后出现10个 会报错吗?

答:如果你在使用make函数初始化映射时指定了初始容量为5,然后实际上存储了10个键值对,这并不会导致报错。在Go语言中,映射的容量(capacity)是可以自动扩展的,以容纳更多的元素。初始容量的设定仅仅是一个性能优化手段,它可以减少随着元素不断添加时内部数据结构可能需要进行的重新分配次数。
在这段代码中,即使你添加了超过5个键值对到students映射中,Go语言的运行时系统会自动调整映射的容量以适应更多的元素,不会引发错误或异常。映射的容量是动态管理的,你不需要手动扩展或缩减。

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

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

相关文章

解决maven编译错误:程序包com.sun.xml.internal.ws.spi不存在

大家好我是咕噜美乐蒂,很高兴又和大家见面了! Maven是一个流行的Java项目管理工具,它可以帮助我们构建、管理和部署Java项目。当在使用Maven编译项目时,有时会遇到一些错误,比如"程序包com.sun.xml.internal.ws.…

go语言学而思【持续更新】

问题:在Go语言中nil是什么意思? 答:在Go语言中,nil是一个预声明的标识符,用于表示某些类型的零值。它可以被用作以下类型的零值: 指针(Pointer)切片(Slice)…

setTimeout参数解读

看到一段代码,记录一个小知识点: function timeout(ms) {return new Promise((resolve, reject) => {setTimeout(resolve, ms, done

OpenCV 4基础篇| OpenCV像素的编辑

目录 1. 前言1. 像素的访问1.1 数组索引访问1.2 img.item() 2. 像素的修改2.1 数值索引修改2.2 img.itemset() 1. 前言 像素是构成数字图像的基本单位,像素处理是图像处理的基本操作。 对像素的访问、修改,可以使用 Numpy 方法直接访问数组元素。 1. 像…

【Ubuntu】Anaconda的安装和使用

目录 1 安装 2 使用 1 安装 (1)下载安装包 官网地址:Unleash AI Innovation and Value | Anaconda 点击Free Download 按键。 然后 点击下图中的Download开始下载安装包。 (2)安装 在安装包路径下打开终端&#…

第三篇:CamX日志打印系统

第三篇:CamX日志打印系统 高通camx的日志主要分2大模块,UMD (user mode driver) 和KMD( kerner mode driver),也就是用户层和kernel层日志。 下面就来看下这2大块日志debug的时候该如何设置? 一、UDM日志 高通camx camera debug日志格式如下: CamX: [][] : . 例子:Ca…

时间获取、文件属性获取 2月20日学习笔记

执行两次代码&#xff0c;打印出两次执行过程中新增的文件及删除的文件 #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> #include <fcntl.h> #include <stdio.h> #include <string.h> #include <dirent.h>#def…

C++ 之LeetCode刷题记录(三十三)

&#x1f604;&#x1f60a;&#x1f606;&#x1f603;&#x1f604;&#x1f60a;&#x1f606;&#x1f603; 开始cpp刷题之旅。 目标&#xff1a;执行用时击败90%以上使用 C 的用户。 11. 盛最多水的容器 给定一个长度为 n 的整数数组 height 。有 n 条垂线&#xff0c;…

Nest.js权限管理系统开发(一)新建项目

新建nestjs项目 nestjs要求node版本大于等于16。我们使用nestjs cli来创建项目&#xff0c;所以执行以下命令&#xff1a; $ npm i -g nestjs/cli $ nest new nest-service --strict 现在我们已经可以进入到nest-service文件夹下&#xff0c;使用以下命令来运行项目了&#x…

渗透测试之RCE漏洞

RCE&#xff08;remote command execute&#xff09;远程命令执行。应用程序的某些功能需要调用可以执行的系统命令的函数&#xff0c;如果这些函数或者函数的参数被用户控制&#xff0c;就可能通过命令连接符将恶意的命令拼接到函数中&#xff0c;从而执行系统命令。 常见的命…

【rust】9、reqwest 调用 http

文章目录 一、client1.1 post reqwest 实现的 http server 和 client 用 https://github.com/seanmonstar/reqwest cargo add reqwest -F json cargo add tokio -F full一、client 1.1 post async fn http_post<T: Serialize>(addr: String, body: T) -> Result<…

推荐两个网络复用相关的 Go pkg: cmux/smux

只写一下如何使用&#xff0c;不对实现进行大量描述&#xff0c;两个库的代码都比较精炼&#xff0c;花一会看一下就行。 cmux 对端口进行复用&#xff0c;单端口可以建立不同协议的连接&#xff08;本质都是 TCP&#xff09;&#xff0c;如 TCP/TLS/HTTP/gRPC 或自定义协议 s…

Puppeteer 使用实战:如何将自己的 CSDN 专栏文章导出并用于 Hexo 博客(二)

文章目录 上一篇效果演示Puppeteer 修改浏览器的默认下载位置控制并发数错误重试并发控制 错误重试源码 上一篇 Puppeteer 使用实战&#xff1a;如何将自己的 CSDN 专栏文章导出并用于 Hexo 博客&#xff08;一&#xff09; 效果演示 上一篇实现了一些基本功能&#xff0c;…

数据结构---链表的基本操作

头插法遍历链表尾插法头删法尾删法按位置插入数据按位置删除数据直接插入排序 链表翻转快慢指针 linklist.c #include <stdio.h> #include <stdlib.h> #include "./linklist.h"linklist* create_linklist(void) {linklist* head (linklist*)malloc(siz…

应用回归分析:非参数回归

非参数回归是一种统计方法&#xff0c;它在建模和分析数据时不假设固定的模型形式。与传统的参数回归模型不同&#xff0c;如线性回归和多项式回归&#xff0c;非参数回归不需要预先定义模型的结构&#xff08;例如&#xff0c;模型是否为线性或多项式&#xff09;。这使得非参…

[面试] 如何保证Redis和MySQL数据一致性?

为什么要在Redis存数据 Redis 用来实现应用和数据库之间读操作的缓存层&#xff0c;主要目的是减少数据 库 IO&#xff0c;还可以提升数据的 IO 性能。 因为Redis基于内存, 查询效率比MySQL快很多, 所以有限查询Redis中的数据,如果Redis没有就查询数据库然后同步到Redis 出…

低代码与大语言模型的探索实践

低代码系列文章&#xff1a; 可视化拖拽组件库一些技术要点原理分析可视化拖拽组件库一些技术要点原理分析&#xff08;二&#xff09;可视化拖拽组件库一些技术要点原理分析&#xff08;三&#xff09;可视化拖拽组件库一些技术要点原理分析&#xff08;四&#xff09;低代码…

1978-2021年全国及31省市农业机械总动力(万千瓦)

1978-2021年全国及31省市农业机械总动力&#xff08;万千瓦&#xff09; 1、时间&#xff1a;1978-2020年 2、范围&#xff1a;31省 3、来源&#xff1a;各省NJ 农业统计NJ 4、缺失情况&#xff1a;无缺失 5、指标&#xff1a;农业机械总动力 6、指标解释&#xff1a; 农…

每日五道java面试题之spring篇(二)

目录&#xff1a; 第一题 Spring事务传播机制第二题 Spring事务什么时候会失效?第三题 什么是bean的⾃动装配&#xff0c;有哪些⽅式&#xff1f;第四题 Spring中的Bean创建的⽣命周期有哪些步骤&#xff1f;第五题 Spring中Bean是线程安全的吗&#xff1f; 第一题 Spring事务…

LeetCode 448.找到所有数组中消失的数字

目录 1.题目 2.代码及思路 3.进阶 3.1题目 3.2代码及思路 1.题目 给你一个含 n 个整数的数组 nums &#xff0c;其中 nums[i] 在区间 [1, n] 内。请你找出所有在 [1, n] 范围内但没有出现在 nums 中的数字&#xff0c;并以数组的形式返回结果。 示例 1&#xff1a; 输入&am…