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)}
}

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

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

相关文章

【Hadoop】MapReduce详解

🦄 个人主页——🎐开着拖拉机回家_大数据运维-CSDN博客 🎐✨🍁 🪁🍁🪁🍁🪁🍁🪁🍁 🪁🍁🪁&#x1f…

nodejs+vue+python+PHP+微信小程序-安卓-房产中介管理信息系统的设计与实现-计算机毕业设计

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性:…

华为笔记本电脑原装win10/win11系统恢复安装教程方法

华为电脑matebook 14原装Win11系统带F10智能还原 安装恢复教程: 1.安装方法有两种,一种是用PE安装,一种是华为工厂包安装(安装完成自带F10智能还原) 若没有原装系统文件,请在这里获取:https:…

EasyDarwin开源流媒体服务器

文章目录 前言一、EasyDarwin 简介二、EasyDarwin 主要功能特点三、安装部署四、推拉流测试1、进入控制页面2、推流测试3、拉流测试 前言 本文介绍一个十分实用的高性能开源 RTSP 流媒体服务器:EasyDarwin。 一、EasyDarwin 简介 EasyDarwin 是基于 go 语言研发&a…

海康Visionmaster-通讯管理:使用 Modbus TCP 通讯 协议与流程交互

使用 Modbus TCP 通讯协议与视觉通讯,当地址为 0000 的保持型寄存器(4x 寄存器)变为 1 时,触发视觉流程执行一次,同时视觉将地址为 0000 的寄存器复位(也即写为 0),视觉流程执行完成后,将结果数…

向量数据库的分类概况

保存和检索矢量数据的五种方法: 像 Pinecone 这样的纯矢量数据库 全文搜索数据库,例如 ElasticSearch 矢量库,如 Faiss、Annoy 和 Hnswlib 支持矢量的NoSQL 数据库,例如 MongoDB、Cosmos DB 和 Cassandra 支持矢量的SQL 数据库&am…

Redis键(Keys)

前言 在 Redis 中,键(Keys)是非常重要的概念,它们代表了存储在数据库中的数据的标识符。对键的有效管理和操作是使用 Redis 数据库的关键一环,它直接影响到数据的存取效率、系统的稳定性和开发的便利性。 本文将深入…

如何将本地项目推送到gitee仓库

本地项目推送到gitee仓库的两种方式: 一、新建gitee空仓库,然后git clone到本地,然后把代码复制进去提交 1.在gitee创建一个仓库,然后git clone 新建的仓库地址,到本地; 2.把项目代码复制到clone下来的仓…

基于SpringBoot+Redis的前后端分离外卖项目-苍穹外卖(四)

编辑员工和分类模块功能开发 1. 编辑员工1.1 需求分析与设计1.1.1 产品原型1.1.2 接口设计 1.2 代码开发1.2.1 回显员工信息功能1.2.2 修改员工信息功能 1.3 功能测试 2. 分类模块功能开发2.1 需求分析与设计2.1.1 产品原型2.1.2 接口设计2.1.3 表设计 2.2 代码实现2.2.1 Mappe…

HarmonyOS开发(三):ArkTS基础

1、ArkTS演进 Mozilla创建了JS ---> Microsoft创建了TS ----> Huawei进一步推出ArkTS 从最初的基础逻辑交互(JS),到具备类型系统的高效工程开发(TS),再到融合声明式UI、多维状态管理等丰富的应用开发能力&…

OpenCV+计算摄影

图像去噪 cv.fastNlMeansDenoising()-处理单个灰度图像cv.fastNlMeansDenoisingColored()-处理彩色图像。cv.fastNlMeansDenoisingMulti()-处理在短时间内捕获的图像序列(灰度图像)cv.fastNlMeansDenoisingColoredMulti()-与上面相同,但用于…

【算法训练-链表 零】链表高频算法题看这一篇就够了

一轮的算法训练完成后,对相关的题目有了一个初步理解了,接下来进行专题训练,以下这些题目就是汇总的高频题目 题目题干直接给出对应博客链接,这里只给出简单思路、代码实现、复杂度分析 反转链表 依据难度等级分别为反转链表、…

linux rsyslog日志采集格式设定一

linux rsyslog日志采集格式设定一 1.创建日志接收模板 打开/etc/rsyslog.conf文件,在GLOBAL DIRECTIVES模块下任意位置添加以下内容 命令: vim /etc/rsyslog.conf 测试:rsyslog.conf文件结尾添加以下内容 $template ztj,"/var/log/%hostname%/%programname%.log&…

Crypto | Affine password 第二届“奇安信”杯网络安全技能竞赛

题目描述: 明文经过仿射函数y3x9加密之后变为JYYHWVPIDCOZ,请对其进行解密,flag的格式为flag{明文的大写形式}。 密文: JYYHWVPIDCOZ解题思路: 1、使用在线网站直接破解或手工计算破解,获得flag。&#xf…

使用Nginx和uwsgi在自己的服务器上部署python的flask项目

Nginx 是一个高性能的 HTTP 和反向代理服务。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好。 Nginx 专为性能优化而开发,性能是其最重要的考量指标,实现上非常注重效率,能经受…

React 18 + Hooks +Ts 开发中遇到的问题及解决方案!

这篇文章是用来专门记录关于React 18 Hooks Ts 开发中遇到的问题及解决方案 Q1 问题描述: TS7016: Could not find a declaration file for module js-export-excel. /Users/zhangliangliang/WebstormProjects/daizhang-system-front/node_modules/js-export-exc…

2023/11/13——java基础回顾

JAVA基础 1,String,StringBuffer,StringBuilder有什么区别 StringStringBufferStringBuilder不可变因为value是final,修改值他就会创建一个新的对象,旧的回收可变的其父类(AbstractStringBuilder) value的数组不是fi…

4.CentOS7安装MySQL5.7

CentOS7安装MySQL5.7 2023-11-13 小柴你能看到嘛 哔哩哔哩视频地址 https://www.bilibili.com/video/BV1jz4y1A7LS/?vd_source9ba3044ce322000939a31117d762b441 一.解压 tar -xvf mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz1.在/usr/local解压 tar -xvf mysql-5.7.44-…

lc307.区域和检索 - 数组可修改

暴力解法 创建方法,通过switch-case判断所需要调用的方法。 public class RegionsAndSertches {public static void main(String[] args) {String[] str new String[]{"NumArray", "sumRange", "update", "sumRange"};i…

头歌-数据结构-二叉查找树的应用

第1关:二叉排序树应用一 #include "binary_sort_tree.h"BiTreeNode* insertBiSortTree(BiTreeNode* root, int key) // 功能:实现向升序二叉排序树插入元素 // 输入:待插入元素key // 返回:升序二叉排序树根节点 {// 请…