6.4 Go 映射(Map)


在这里插入图片描述
💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。
在这里插入图片描述

  • 推荐:「stormsha的主页」👈,持续学习,不断总结,共同进步,为了踏实,做好当下事儿~

  • 专栏导航

    • Python系列: Python面试题合集,剑指大厂
    • Git系列: Git操作技巧
    • GO系列: 记录博主学习GO语言的笔记,该笔记专栏尽量写的试用所有入门GO语言的初学者
    • 数据库系列: 详细总结了常用数据库 mysql 技术点,以及工作中遇到的 mysql 问题等
    • 运维系列: 总结好用的命令,高效开发
    • 算法与数据结构系列: 总结数据结构和算法,不同类型针对性训练,提升编程思维

    非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。💝💝💝 ✨✨ 欢迎订阅本专栏 ✨✨

    💖The Start💖点点关注,收藏不迷路💖

    📒文章目录

      • 映射的基本概念
      • 初始化映射
      • 映射的使用技巧
        • 1. 映射的遍历
        • 2. 映射的删除
        • 3. 映射的零值
        • 4. 映射的比较
        • 5. 映射作为函数参数
        • 6. 映射的并发安全
        • 7. 映射的容量
        • 8. 映射的迭代顺序
        • 9. 使用映射作为结构体的字段
        • 10. 映射与接口
      • 总结


内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容

在Go语言中,映射(Map)是一种非常强大的数据结构,它允许开发者存储键值对(key-value pairs)。由于其灵活性和效率,映射在Go开发中扮演着至关重要的角色。本文将深入探讨Go映射的高级使用技巧,旨在帮助中高级开发者提升对映射的理解和应用能力。

映射的基本概念

映射在Go中是一个内置类型,它允许你将一个值(key)映射到另一个值(value)。映射的声明语法如下:

var mapName map[keyType]valueType

其中keyType是映射的键类型,而valueType是映射的值类型。键类型可以是任何可比较的类型,例如int、string、bool等,而值类型可以是任意类型。

初始化映射

映射需要显式初始化,不能像数组或切片那样默认初始化。初始化映射的几种方式如下:

// 使用make函数初始化映射
var m map[int]string
m = make(map[int]string)// 直接初始化映射
m := map[int]string{1: "one",2: "two",3: "three",
}// 使用make函数并初始化映射
m := make(map[int]string)
m[1] = "one"
m[2] = "two"
m[3] = "three"

映射的使用技巧

1. 映射的遍历

遍历映射是常见的操作,可以使用range关键字来实现:

for key, value := range m {fmt.Printf("Key: %d, Value: %s\n", key, value)
}

2. 映射的删除

使用delete函数可以删除映射中的元素:

delete(m, key)

3. 映射的零值

映射的零值是nil,这意味着它不包含任何键值对。尝试访问nil映射的元素将导致运行时错误。因此,在使用映射之前,务必确保它已经被初始化。

4. 映射的比较

由于映射是引用类型,不能直接比较。如果需要比较两个映射是否相等,可以使用第三方库或自定义比较逻辑。

5. 映射作为函数参数

当映射作为函数参数传递时,由于它是引用类型,函数内部对映射的修改会影响外部的映射。

func updateMap(m map[int]string) {m[1] = "ONE"
}func main() {m := map[int]string{1: "one"}updateMap(m)fmt.Println(m) // 输出: map[1:ONE]
}

6. 映射的并发安全

默认情况下,映射不是并发安全的。如果需要在并发环境中使用映射,可以使用sync.Map或第三方库如golang.org/x/sync/singleflight来保证线程安全。

7. 映射的容量

使用make函数初始化映射时,可以指定其容量。虽然这不是必须的,但如果事先知道映射的大小,指定容量可以提高性能。

m := make(map[int]string, 100)

8. 映射的迭代顺序

映射的迭代顺序不是固定的,每次遍历映射时,元素的顺序可能会不同。

9. 使用映射作为结构体的字段

映射可以作为结构体的一部分,这样可以创建更复杂的数据结构。

type Person struct {Name stringAge  int// 映射作为字段Attributes map[string]string
}

10. 映射与接口

映射可以存储任何类型的值,包括接口类型。这使得映射可以非常灵活地存储不同类型的数据。

总结

Go的映射是一个非常强大的工具,通过掌握其高级使用技巧,开发者可以更有效地解决各种编程问题。从基本的初始化和遍历,到更高级的并发控制和性能优化,映射在Go语言中的应用广泛且深入。


🔥🔥🔥道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

💖The End💖点点关注,收藏不迷路💖

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

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

相关文章

Java 异常处理详解(如果想知道Java中有关异常处理的知识点,那么只看这一篇就足够了!)

前言:异常处理是 Java 编程中非常重要的一部分,它能够有效地捕获和处理程序运行中的错误,提高代码的健壮性和可靠性。本文将深入探讨 Java 中异常的概念、体系结构、抛出、解决方式以及如何自定义异常,并结合代码案例进行详细解释…

mysql 如果有按照时间范围查询结果

1.前端传2024-06-21 到我们xml sql 文件中默认实际是 2024-06-21 00:00:00 <if test"dto.startTime ! null">and ps.created_at > #{dto.startTime}</if><if test"dto.endTime ! null">and ps.created_at < #{dto.endTime}</if…

Linux命令篇(六):vi/vim专项

&#x1f49d;&#x1f49d;&#x1f49d;首先&#xff0c;欢迎各位来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里不仅可以有所收获&#xff0c;同时也能感受到一份轻松欢乐的氛围&#xff0c;祝您生活愉快&#xff01; 文章目录 一、什么是vim二…

Microsoft Outlook Lite 引入短信功能

随着科技的不断进步&#xff0c;我们的沟通方式也在不断演变。微软最新推出的 Outlook Lite 应用&#xff0c;不仅为我们提供了一个轻量级的电子邮件管理工具&#xff0c;现在更是带来了一项令人兴奋的新功能——短信服务。 Outlook Lite&#xff1a;轻量级&#xff0c;功能全…

今日好料推荐(ARM嵌入式)

今日好料推荐&#xff08;ARM嵌入式&#xff09; 参考资料在文末获取&#xff0c;关注我&#xff0c;获取优质资源。 给我留言&#xff0c;会帮大家寻找需要的资料。 ARM 嵌入式系统 嵌入式系统在现代电子设备中扮演着至关重要的角色&#xff0c;从智能手机到工业自动化&am…

深入了解 C 语言 Bug

目录 一、引言二、Bug的定义三、Bug的由来四、Bug的影响五、应对 Bug 的方法六、结论 一、引言 1、在 C 语言的编程世界中&#xff0c;Bug 是一个我们无法回避的话题。 2、Bug&#xff0c;简单来说&#xff0c;就是程序中存在的错误或缺陷。它可以表现为程序运行结果的异常、崩…

HALCON-从入门到入门-形态学操作-千变万化的region

1.废话 计算机视觉中的形态学操作是一种基本的数字图像处理技术&#xff0c;主要用于图像的形态结构改变&#xff0c;以便执行前后景分割、形状检测等任务。 膨胀&#xff08;Dilation&#xff09;&#xff1a; 膨胀操作是将结构元素在图像上滑动&#xff0c;如果结构元素与图…

CMakeFile.txt通过sysroot方式后生成makefile报错

报错信息如下&#xff1a; -- The C compiler identification is unknown -- The CXX compiler identification is unknown -- Check for working C compiler: /home/xj/asm/host/bin/aarch64-buildroot-linux-gnu-gcc -- Check for working C compiler: /home/xj/asm/host/bi…

VScode远程连接linux服务器开发,误删了文件怎么找回。

VScode远程连接linux服务器开发&#xff0c;误删了代码文件 因为远程服务器大家都在用&#xff0c;没有足够权限去折腾。找遍了没找到方法&#xff0c;就告诉我远程的文件本地没有缓存啊&#xff01;我就差点开始重写代码了。 后来被我发现了TIMELINE功能&#xff0c;这个功能…

YUM安装httpd实验配置apache

实验目的及实验要求&#xff1a; 实验目的&#xff1a; 2.实验要求&#xff1a; &#xff08;1&#xff09;完成命令的编写&#xff0c;并能正确运行&#xff1b; &#xff08;2&#xff09;从中熟练掌握命令的功能及作用。 实验设备及软件&#xff1a; pc机 配置好Lin…

叉积和法向量学习笔记

目录 叉积用的内积 相似点 给定平面上的两个向量 A 和 B&#xff0c;叉积和法向量相等吗 理解这点的关键&#xff1a; 结论&#xff1a; 叉积判断平面内两个向量是否相交 叉积&#xff08;Cross Product&#xff09;和法向量&#xff08;Normal Vector&#xff09;确实有…

js 给数组对象添加多个属性

// 假设有一个数组对象 let items [{ id: 1, name: Item 1 },{ id: 2, name: Item 2 },{ id: 3, name: Item 3 } ];// 要添加的新属性 const newProps {newProp1: value1,newProp2: value2 };// 使用map方法添加新属性 let updatedItems items.map(item > ({ ...item, ..…

什么是AI应用开发

&#x1f9d9;‍♂️ 诸位好&#xff0c;吾乃斜杠君&#xff0c;编程界之翘楚&#xff0c;代码之大师。算法如流水&#xff0c;逻辑如棋局。 &#x1f4dc; 吾之笔记&#xff0c;内含诸般技术之秘诀。吾欲以此笔记&#xff0c;传授编程之道&#xff0c;助汝解技术难题。 &#…

【AR开发-开源框架】使用Sceneform-EQR快速开发AR应用,当前接入了AREngine、ORB-SLAM,可快速地适配不同的安卓设备

Sceneform-EQR Sceneform 概览 Sceneform是一个3D框架&#xff0c;具有基于物理的渲染器&#xff0c;针对移动设备进行了优化&#xff0c;使您可以轻松构建增强现实应用程序&#xff0c;而无需OpenGL。 借助 Sceneform&#xff0c;您可以轻松地在 AR 应用和非 AR 应用中渲染…

音乐版权NFT开发流程

开发音乐版权NFT&#xff08;非同质化代币&#xff09;的流程涉及多个步骤&#xff0c;从概念化和版权管理到技术实现和市场推广。以下是一个详细的开发流程指南。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 1.概念化与规划 定义…

使用git

解决参考如下链接 git设置全局用户名和邮箱以及删除方式

【Qt系列教程】一、认识Qt、安装Qt、运行Hello Qt

文章目录 1.1 Qt 简介1.2 Qt 的安装1.3 编写 Hello World 1.1 Qt 简介 Qt&#xff08;官网&#xff1a;https://www.qt.io&#xff09;于1995年5月首次公开发布&#xff0c;是一个跨平台的应用程序开发框架&#xff0c;也是最主流的 C 开发框架&#xff1b; Qt 具有其他编程…

【全开源】考试答题系统源码(FastAdmin+ThinkPHP+Uniapp)

一款基于FastAdminThinkPHPUniapp开发的小程序答题考试系统&#xff0c;提供全部前后台无加密源代码&#xff0c;支持私有化部署。 &#x1f4dd;考试答题系统&#xff1a;便捷高效的学习新选择&#x1f4a1; &#x1f4da; 考试答题系统是什么&#xff1f; 考试答题系统&…

【Transformer(7)】Transformer架构解析

一、Transformer结构图 从上图可以看到&#xff1a; Transformer结构主要由编码和解码两大部分组成&#xff1a; &#xff08;1&#xff09;输入- position embedding - patch embedding &#xff08;2&#xff09;编码器 多头注意力机制 Add & NormMLP Add & Norm &…

怎么判断护眼台灯真的有用吗?揭秘护眼台灯怎么选!

中国目前面临着严重的近视问题&#xff0c;各学段学生的近视率普遍偏高&#xff0c;且高度近视的占比也不容忽视。这不仅对学生的身体健康构成威胁&#xff0c;也对国家的经济社会可持续发展和国家安全构成潜在风险。随着时代的进步和教育的普及&#xff0c;儿童近视的问题已经…