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,一经查实,立即删除!

相关文章

【vuejs】组件中 data 函数的作用和分析

1. 组件复用性与数据隔离 组件在Vue中是用于复用的,每个组件实例应该拥有自己的独立状态,以避免不同组件实例之间的数据冲突和相互影响。Vue通过将组件的data定义为一个函数来实现这一点。 1.1 组件复用性 组件复用性是指组件可以在多个地方被重复使用…

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…

Java 面试题:Java 的动态代理是基于什么原理?

编程语言通常有各种不同的分类角度&#xff0c;动态类型和静态类型就是其中一种分类角度&#xff0c;简单区分就是语言类型信息是在运行时检查&#xff0c;还是编译期检查。 与其近似的还有一个对比&#xff0c;就是所谓强类型和弱类型&#xff0c;就是不同类型变量赋值时&…

Stage #1 无过滤的XSS注入:基础与实操

Stage #1 无过滤的XSS注入&#xff1a;基础与实操 跨站脚本攻击&#xff08;XSS&#xff09;是Web安全领域中一种常见的攻击手段。在"XSS Challenges"闯关游戏中&#xff0c;Stage #1专为初学者设计&#xff0c;用于练习无过滤的XSS注入技术。本文将详细介绍这一阶段…

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;功能全…

【.Net】Linq的使用

文章目录 一、Linq介绍二、在两个数据源联合查询中的使用三、Linq的其他用法 一、Linq介绍 LINQ&#xff08;Language Integrated Query&#xff09;是C#中的一个强大功能&#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…

Vue CLI:Vue CLI是一个强大的工具,可以帮助开发者快速地创建和管理Vue项目。我们可以讨论它的一些核心特性,比如热重载、懒加载等

Vue CLI简介 Vue CLI简介 Vue CLI,全称Vue Command Line Interface,是一个基于Vue.js进行快速开发的完整系统。它帮助开发者通过提供一整套工具来提高项目的开发效率。Vue CLI包括了从项目创建到代码调试,再到最终打包部署的全流程式的解决方案。 定义和用途 Vue CLI的…

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…

【推荐系统-特征工程】把item的tag加工为特征的三种方式

1&#xff0c;高订单tag的top1-10的tag-id&#xff0c;作为user的单侧共10维特征的value 即一个list作为user单侧特征 缺点&#xff1a;丢失了user对每个tag的订单数量和tag-rank10以外的tag信息 2&#xff0c;高订单tag的top1-10的订单量&#xff0c;和高订单tag的top1-10的t…

叉积和法向量学习笔记

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

GPT-4o能力评价与个人感受

GPT-4o是OpenAI最新推出的人工智能模型&#xff0c;与其前身GPT-4相比有了显著的提升。以下是对GPT-4o技术能力的评价以及版本间的对比分析和个人整体感受。 技术能力 1. 多模态能力&#xff1a; GPT-4o具备真正的多模态能力&#xff0c;能够处理和生成文本、音频和视觉输入和…

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;助汝解技术难题。 &#…