【Golang】Go语言Map数据类型

Go语言Map数据类型

文章目录

  • Go语言Map数据类型
    • 一、Map
      • 1.1.1、map定义
      • 1.1.2、map的基本使用
      • 1.1.3、判断某个键是否存在
      • 1.1.4、map的遍历
      • 1.1.5、使用delete()函数删除键值对
      • 1.1.6、按照指定顺序遍历map
      • 1.1.7、元素为map类型的切片
      • 1.1.8、值为切片类型的map

一、Map

  • map是一种无序的基本key-value的数据结构,Go语言中的map是引用类型,必须初始化才能使用。

1.1.1、map定义

  • Go语言中map的定义语法如下
map[keytype]valuetype
  • 其中
keytype: 表示键的类型
valuetype: 表示值的类型
  • map类型的变量默认初始值为nil,需要使用make()来分配内存。
  • 语法如下
make(map[keytype]valuetype, [cap])
  • 其中cap表示map的容量,该参数虽然不是必须的,但是我们应该在初始化map的时候就为其执行一个合适的容量。

1.1.2、map的基本使用

  • map中的数据都是成对出现的,map的基本使用示例代码如下:
func main() {scoreMap := make(map[string]int, 8)scoreMap["张三"] = 90scoreMap["小明"] = 100fmt.Println(scoreMap)fmt.Println(scoreMap["小明"])fmt.Printf("tyoe of a:%T\n", scoreMap)}
  • 结果如下
map[小明:100 张三:90]
100
tyoe of a:map[string]int
  • map也支持在声明的时候填充元素,例如
func main() {userInfo := map[string]string{"username": "admin","password": "admin@123",}fmt.Println(userInfo)  // map[password:admin@123 username:admin]fmt.Println(userInfo["username"])  // admin fmt.Println(userInfo["password"])  // admin@123}

1.1.3、判断某个键是否存在

  • Go语言中有个判断map中键是否存在的特俗写法,格式如下:
# value: 将会获得这个map的值
# ok: 如果key存在那么ok的值就是true否者为false
value, ok := map[key]
  • 举个例子:
func main() {userInfo := map[string]string{"username": "admin","password": "admin@123",}// 如果key存在ok为true, v为对应key的值; 不存在ok为false, v为值类型的零值v, ok := userInfo["username"]if ok {fmt.Println(v)} else {fmt.Println("查无此人")}}

1.1.4、map的遍历

  • Go语言中使用for range遍历map
func main() {scoremap := make(map[string]int)scoremap["张三"] = 90scoremap["小明"] = 100scoremap["王五"] = 60for k, v := range scoremap {fmt.Printf("key: %s value: %d\n", k, v)}}
  • 但我们只想遍历key的时候,可以按照下面的写法:
func main() {scoremap := make(map[string]int)scoremap["张三"] = 90scoremap["小明"] = 100scoremap["王五"] = 60for k := range scoremap {fmt.Printf(k)}}
  • 注意:遍历map时的元素顺序与添加键值对的顺序毫无关系

1.1.5、使用delete()函数删除键值对

  • 使用delete()内建函数从map中删除一组键值对,delete()函数的格式如下:
delete(map, key)
  • 其中
map: 表示要删除键值对的map
key: 表示要删除的键值对的key
  • 示例代码如下
func main() {scoremap := make(map[string]int)scoremap["张三"] = 90scoremap["小明"] = 100scoremap["王五"] = 60delete(scoremap, "小明")for k, v := range scoremap {fmt.Printf(k, v)}}

1.1.6、按照指定顺序遍历map

func main() {rand.Seed(time.Now().UnixNano()) // 初始化随机种子var scoreMap = make(map[string]int, 200)for i := 0; i < 100; i++ {key := fmt.Sprintf("stu%02d", i) // 生成stu开发的字符串value := rand.Intn(100)          // 生成0-99的随机整数scoreMap[key] = value}// 取出map中的所有key存入切片keysvar keys = make([]string, 0, 200)for key := range scoreMap {keys = append(keys, key)}// 对切片进行排序sort.Strings(keys)for _, key := range keys {fmt.Println(key, scoreMap[key])}}

1.1.7、元素为map类型的切片

  • 下面的代码演示了切片中的元素为map类型时的操作
func main() {// 使用make初始化一个map类型的切片var mapSlice = make([]map[string]string, 3)for index, value := range mapSlice {fmt.Printf("index: %d value: %v\n", index, value)}fmt.Println("init data")// 在mapSlice这个切片的第0个位置, 创建一个容量为10的map,并进行赋值mapSlice[0] = make(map[string]string, 10)mapSlice[0]["name"] = "王五"mapSlice[0]["password"] = "123456"mapSlice[0]["address"] = "红旗大街"for index, value := range mapSlice {fmt.Printf("index: %d value: %v\n", index, value)}}

1.1.8、值为切片类型的map

  • 下面的代码演示了map中值为切片类型的操作
func main() {var sliceMap = make(map[string][]string, 3)fmt.Println(sliceMap)fmt.Println("init data")key := "中国"value, ok := sliceMap[key]if !ok {value = make([]string, 0, 2)}value = append(value, "北京", "上海")sliceMap[key] = valuefmt.Println(sliceMap)
}

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

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

相关文章

Orange的运维学习日记--23.Linux计划任务详解

Orange的运维学习日记–23.Linux计划任务详解 文章目录Orange的运维学习日记--23.Linux计划任务详解一次性计划任务atd 服务at 命令基本语法交互式示例脚本文件示例timespec 格式示例查看与管理任务查看当前队列查看任务详细内容删除任务用户权限控制用户周期性计划任务查看任务…

Ubuntu 24.04.2 LTS 安装mysql8.0.36保姆级教程(从安装到远程连接)

目录 前言 一、系统准备 二、安装 MySQL 8.0.36 1. 查看可用版本 2.如果没有对应版本则需要手动下载mysql-apt-config&#xff08;有则跳过&#xff09; 2.1下图是mysql-apt-config各版本对应的mysql版本 2.2下载mysql apt repository 2.3安装 MySQL APT Repository 包 …

【LLM】讲清楚MLA原理

需要你对MHA、MQA、GQA有足够了解&#xff0c;相信本文能帮助你对MLA有新的认识。 本文内容都来自https://www.youtube.com/watch?v0VLAoVGf_74&#xff0c;如果阅读本文出现问题&#xff0c;建议直接去看一遍。 按照Deepseek设定一些参数值&#xff1a;输入token长度n10&…

谷歌采用 Ligero 构建其 ZK 技术栈

1. 引言 前序博客有&#xff1a; Ligero 和 Ligetron 中的 MPC 和 ZKLigetron&#xff1a;Nim Network开发的针对AI的zkVMLigetron&#xff1a;基于MPC-In-The-Head范式的zkVM简介 在隐私保护身份验证领域迈出重要一步&#xff0c;谷歌最近宣布 将零知识证明&#xff08;ZKP…

Flutter渲染引擎:Impeller和Skia

一、Impeller 渲染引擎的发布时间Impeller 是 Flutter 团队为解决 Skia 引擎在移动端&#xff08;尤其是 iOS 平台&#xff09;的性能问题而开发的全新渲染引擎&#xff0c;其发展历程如下&#xff1a;首次公开&#xff1a;2021 年 Google I/O 大会上首次提及&#xff0c;作为 …

网络编程-加密算法

目录 一.网络编程基础 1. 概述 2. IP地址 3. 域名 4. 网络模型 5. 常用协议 6. 小结 二.TCP编程 1. 什么是Socket&#xff1f; 2. 服务器端 3. 客户端 4. Socket流 5. 小结 三.UDP编程 1. 概述 2. 服务器端 3. 客户端 4. 小结 案例&#xff1a; 四.加密算法 …

【网络工程师软考版】网络安全

任何形式的网络服务都会导致安全方面的风险&#xff0c;问题是如何将风险降到最低程度&#xff0c;目前的网络安全措施有数据加密、数字签名、身份认证、防火墙、特征过滤等。所涉内容&#xff1a;1、网络安全基础2、加密技术与哈希算法3、数字签名4、数字证书5、VPN技术6、防火…

深入浅出设计模式——创建型模式之建造者模式 Builder

文章目录建造者模式简介建造者模式结构建造者模式代码实例定义产品类House定义建造者定义抽象建造者AbstractBuilder定义具体建造者定义指挥者客户端代码示例运行结果建造者模式总结代码仓库建一栋房子总共分几步&#xff1f;建造者模式告诉你答案&#xff01;“把大象装冰箱&a…

OpenVLA: 论文阅读 -- 开源视觉-语言-行动模型

更多内容&#xff1a;XiaoJ的知识星球 目录OpenVLA&#xff1a;开源视觉-语言-行动模型1. 介绍2. 相关工作1&#xff09;视觉条件语言模型&#xff08;Visually-Conditioned Language Models&#xff09;2&#xff09;通用型机器人策略&#xff08;Generalist Robot Policies&a…

JavaWeb(苍穹外卖)--学习笔记15(分页查询PageHelper)

前言 终于开始学习做项目了&#xff0c;本篇文章是学习B站黑马程序员苍穹外卖的学习笔记&#x1f4d1;。我的学习路线是Java基础语法-JavaWeb-做项目&#xff0c;管理端的功能学习完之后&#xff0c;就进入到了用户端微信小程序的开发&#xff0c;这篇文章来看看分页查询&#…

金融专题|某跨境支付机构:以榫卯企业云平台 VPC 功能保障业务主体安全

作者&#xff1a;SmartX 金融团队 金融机构在信息化建设时面临诸多数据合规要求&#xff0c;例如&#xff1a;不同业务区域之间互相隔离、数据库仅能由关联的应用服务器访问、仅有特定的服务器允许被外网访问等。对此&#xff0c;某跨境支付机构以 SmartX 榫卯企业云平台构建私…

Win10下python环境变量呼出微软应用商店

以下是三种彻底解决 Windows 10 的 CMD 中运行 python 命令弹出应用商店问题的方法​​方法一&#xff1a;调整环境变量优先级​-或者直接删除微软应用商店的环境变量%USERPROFILE%\AppData\Local\Microsoft\WindowsApp​​​操作步骤​​打开系统环境变量设置&#xff08;右键…

字节跳动“扣子”(Coze)开源:AI智能体生态的技术革命

&#xff08;以下借助 DeepSeek-R1 辅助整理&#xff09; 在2025年7月26日的深夜&#xff0c;GitHub上悄然出现的两个仓库——Coze Studio和Coze Loop&#xff0c;在48小时内狂揽超过9,000颗Star。字节跳动以Apache 2.0许可证将自家AI智能体平台的核心技术彻底开源。 “当所有人…

Camx-usecase ID和pipeline的匹配源码解读

组件关系整体流程&#xff1a;camxhal3.cpp:704 open()camxhal3.cpp:1423 configure_streams()chxextensionmodule.cpp:2810 InitializeOverrideSessionchxusecaseutils.cpp:850 GetMatchingUsecase()chxadvancedcamerausecase.cpp:4729 Initialize()chxadvancedcamerausecase.…

日志管理进入「对话式」时代:日志易MCP Server落地实录

01 背景&#xff1a;MCP协议介绍在AI蓬勃发展的当下&#xff0c;大型语言模型&#xff08;LLM&#xff09;虽展现出强大潜力&#xff0c;却受困于与外部资源连接的难题。数据分散、接口繁杂&#xff0c;致使AI模型难以灵活对接本地资源与远程服务&#xff0c;极大限制了其响应质…

django-3模型操作

from django.db import modelsclass Book(models.Model):title models.CharField(max_length200) # 书名author models.CharField(max_length100) # 作者publish_date models.DateField() # 出版日期price models.DecimalField(max_digits10, decimal_places2) # 价格s…

【绘制图像轮廓】——图像预处理(OpenCV)

目录 1 什么是轮廓 2 寻找轮廓 2.1 mode参数 2.2 method参数 3 绘制轮廓 1 什么是轮廓 轮廓是一系列相连的点组成的曲线&#xff0c;代表了物体的基本外形。轮廓是连续的&#xff0c;边缘不一定连续。轮廓是一个闭合的、封闭的形状。 轮廓的作用&#xff1a; 形状分析 目…

嵌入式 Linux 深度解析:架构、原理与工程实践(增强版)

嵌入式 Linux 深度解析&#xff1a;架构、原理与工程实践&#xff08;增强版&#xff09; 目录嵌入式 Linux 深度解析&#xff1a;架构、原理与工程实践&#xff08;增强版&#xff09;第一章 嵌入式 Linux 基础概念1.1 定义与核心特征1.2 典型架构栈深度解析第二章 Linux 文件…

xcode swift项目运行、连接真机运行报错,引入文件夹失败

最近乱七八糟解决了很多报错&#xff0c;看着记录点吧 xcode版本&#xff1a;16 failed to emit precompiled header ‘/Users/yuqing/Library/Developer/Xcode/DerivedData/cloudspace-ios-ejldldcfhouqnretchuzoewmsqkg/Build/Intermediates.noindex/PrecompiledHeaders/spic…

[python][selenium] Web UI自动化8种页面元素定位方式

测试工程师必备&#xff01;Selenium自动化测试全攻略 | 手写POM框架数据驱动&#xff0c;轻松搞定UI自动化&#xff01;简单的加个前置知识&#xff1a; 第一&#xff1a;webdriver.Chrome()这句话&#xff0c;通过WebDriver的构造方法&#xff0c;拿到浏览器驱动的对象&…