go map的声明和使用

news2025/3/10 23:23:45

1.简介

map是key-value数据结构,右丞为字段或者关联数据。类似其他语言的集合,map在go中是引用类型,必须初始化才能使用。

2.语法

map[keytype]valuetype

keytype:表示间的类型。可以是基本数据类型,还可以是指针、channl等。注意slice、map还有function是可用的,没办法用==来判断。常用 string ,int。

valuetype:表示key对应的值。

3.map的初始化

3.1方式一

在使用前,需要先make,make的作用就是给map分配数据空间

    var dog map[string]string
	dog = make(map[string]string)
	dog["color"] = "red"
	dog["name"] = "dahuang"
	fmt.Println(dog)

结果:

map[color:red name:dahuang]

 

3.2方式二

    userinfo := make(map[string]string)
	userinfo["name"] = "zhansan"
	userinfo["height"] = "1.98"
	fmt.Println(userinfo)

结果:

 

map[height:1.98 name:zhansan]

3.3方式三

在声明的时候直接填充数据

	person := map[string]string{
		"name":   "松江",
		"height": "1.89",
	}
	fmt.Println(person)

结果:

map[height:1.89 name:松江]

4.map的增删改查

4.1map的增加

    var dog map[string]string
	dog = make(map[string]string)
	dog["color"] = "red"
	dog["name"] = "dahuang"

4.2map的查找

var dog map[string]string
	dog = make(map[string]string)
	dog["color"] = "red"
	dog["name"] = "dahuang"
	fmt.Println(dog["color"])
	value, ok := dog["name1"]
	if ok {
		fmt.Println(value)
	} else {
		fmt.Println("不存在")
	}

 说明:如果dog这个map存在name1,那么ok就等于true,否则返回false。

 结果:

red
不存在

4.3map的修改

var dog map[string]string
	dog = make(map[string]string)
	dog["color"] = "red"
	dog["name"] = "dahuang"
	dog["color"] = "pink"
	fmt.Println(dog["color"])

说明  :dog["color"] = "pink" //如果有color这个key,就修改,没有就增加。

结果: 

pink

4.4.map的删除

    var dog map[string]string
	dog = make(map[string]string)
	dog["color"] = "red"
	dog["name"] = "dahuang"
	delete(dog, "color")
	fmt.Println(dog)

 说明:delete(dog, "color"),delete是一个内置函数,如果key存在,就删除该key-value,如果不存在,不操作,也不会报错。

如果要删除map的所有key,没有一个专门的方法一次删除,可以遍历删除,或者map=make()一个新的,让原来的成为垃圾,被gc回收。

结果:

map[name:dahuang]

 5.map的遍历

person := map[string]string{
		"name1": "松江",
		"name2": "武松",
	}

 结果:

key:name1  value:松江
key:name2  value:武松

6.map切片的使用

var listUser = make([]map[string]string, 2, 2)
	listUser[0] = make(map[string]string)
	listUser[0]["no"] = "1"
	listUser[0]["name"] = "zhangsan"
	listUser[1] = make(map[string]string)
	listUser[1]["no"] = "2"
	listUser[1]["name"] = "wangwu"
	fmt.Println(listUser)
	for _, value := range listUser {
		for key, mvalue := range value {
			fmt.Println(key, mvalue)
		}
	}

结果:

no 1
name zhangsan
no 2
name wangwu

7.使用细节

7.1map是引用类型,遵守引用类型传递的机制,在一个函数接受map,修改后,会直接修改原来的map。

7.2map的荣狼打倒后,在想map增加元素,会自动扩容,并不会发生panic,也就是说map能动态增长。

7.3map的value也常用struct类型,更适合管理复杂的数据。

8.练习提

计算字符串abcdergabchsdjfhfshkfh中各个字幕出现的次数。

var str = "abcdergabchsdjfhfshkfh"
	slice := []byte(str) //转成切片,再用string(slice[i])转换成字母
	maptotal := make(map[string]int)
	for _, value := range slice {
		_, ok := maptotal[string(value)]
		if ok {
			maptotal[string(value)] = maptotal[string(value)] + 1
		} else {
			maptotal[string(value)] = 1
		}
	}
	fmt.Println(maptotal)

结果:

map[a:2 b:2 c:2 d:2 e:1 f:3 g:1 h:4 j:1 k:1 r:1 s:2]

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

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

相关文章

《V8 引擎狂飙,Node.js 续写 JavaScript 传奇》

”你没想过也许是这个镇子对你来说太小了吗? 对我而言,这个小镇容不下我的雄心壮志。 “ 什么是 Node.js? Node.js是一个跨平台JS运行环境,使开发者可以搭建服务器端的JS应用程序 作用:使用 Node.js 编写服务器端程序…

【Java代码审计 | 第八篇】文件操作漏洞成因及防范

未经许可,不得转载。 文章目录 文件操作漏洞文件读取漏洞基于 InputStream 的读取基于 FileReader 的读取 文件下载漏洞文件删除漏洞防范 文件操作漏洞 分为文件读取漏洞、文件下载漏洞与文件删除漏洞。 文件读取漏洞 在Java中,文件读取通常有两种常见…

在Linux开发板中使用.NET实现音频开发

本文将以Linux开发板为基础,使用ALSA音频框架和C#语言,演示如何实现基础的音频录制与播放功能。 1. 背景 音频处理是嵌入式开发中常见的需求,无论是语音交互、环境监测还是多媒体应用都离不开音频模块的支持。在Linux系统中,ALSA…

基于RNN+微信小程序+Flask的古诗词生成应用

项目介绍 平台采用B/S结构,后端采用主流的Flask框架进行开发,古诗词生成采用RNN模型进行生成,客户端基于微信小程序开发。是集成了Web后台开发、微信小程序开发、人工智能(RNN)等多个领域的综合性应用,是课…

基于单片机的智慧农业大棚系统(论文+源码)

1系统整体设计 经过上述的方案分析,采用STM32单片机为核心,结合串口通信模块,温湿度传感器,光照传感器,土壤湿度传感器,LED灯等硬件设备来构成整个控制系统。系统可以实现环境的温湿度检测,土壤…

2025-03-08 学习记录--C/C++-PTA 习题8-9 分类统计各类字符个数

合抱之木&#xff0c;生于毫末&#xff1b;九层之台&#xff0c;起于累土&#xff1b;千里之行&#xff0c;始于足下。&#x1f4aa;&#x1f3fb; 一、题目描述 ⭐️ 二、代码&#xff08;C语言&#xff09;⭐️ #include <stdio.h> #define MAXS 15void StringCount( …

OTP单片机调试工具

大部分的OTP单片机开发流程是先用仿真器进行仿真&#xff0c;f仿真完成之后再烧录OTP单片机芯片进行验证&#xff0c;但是很多少时候会发现有一个问题&#xff0c;仿真器仿真都是OK的&#xff0c;但是一旦焊接在板上了&#xff0c;就往往发现有问题&#xff0c;因为硬件条件变化…

二次SQL注入

原理 用户向数据库存入恶意数据&#xff0c;当数据被送进数据库的时候&#xff0c;会对存入的信息进行转义然后再储存&#xff0c;但是存进去的数据会再次被转义回来&#xff08;也就是原样不变的存进数据库里&#xff0c;只是害怕攻击者在存入数据的时候捣蛋而已&#xff09;…

【贪心算法】将数组和减半的最小操作数

1.题目解析 2208. 将数组和减半的最少操作次数 - 力扣&#xff08;LeetCode&#xff09; 2.讲解算法原理 使用当前数组中最大的数将它减半&#xff0c;&#xff0c;直到数组和减小到一半为止&#xff0c;从而快速达到目的 重点是找到最大数&#xff0c;可以采用大根堆快速达到…

Dify部署踩坑指南(Windows+Mac)

组件说明 Dify踩坑及解决方案 ⚠️ 除了修改镜像版本&#xff0c;nginx端口不要直接修改docker-compose.yaml &#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 1、更换镜像版本 这个文件是由.env自动生成的&#xff0c;在.env配置 …

你为什么要写博客?

契机&#xff1a;最近CSDN系统给我发了一条私信&#xff0c;说我成为博主已经四年了&#xff0c;写一篇博客纪念可以得一枚纪念勋章&#xff0c;遂有此文。 机缘 最开始的这篇博客&#xff0c;是为了公司内部的一次分享会准备的&#xff0c;完全是YY出来的&#xff0c;现在看…

【VUE2】第三期——样式冲突、组件通信、异步更新、自定义指令、插槽

目录 1 scoped解决样式冲突 2 data写法 3 组件通信 3.1 父子关系 3.1.1 父向子传值 props 3.1.2 子向父传值 $emit 3.2 非父子关系 3.2.1 event bus 事件总线 3.2.2 跨层级共享数据 provide&inject 4 props 4.1 介绍 4.2 props校验完整写法 5 v-model原理 …

P8685 [蓝桥杯 2019 省 A] 外卖店优先级--优先队列“数组”!!!!!

P8685 [蓝桥杯 2019 省 A] 外卖店优先级 题目 解析优先队列如何判断是否使用优先队列&#xff1f;省略规则优先队列常用操作大顶堆 vs 小顶堆定义队列h队列数组 代码 题目 解析 每个外卖店会在不同的时间点收到订单&#xff0c;我们可以看见测试用例的时间顺序是不同的&#x…

VsCode + EIDE + OpenOCD + STM32(野火DAP) 开发环境配置

VsCode EIDE OpenOCD STM32(野火DAP) 开发环境配置 接受了新时代编辑器的我&#xff0c;实在受不了Keil的上古编辑页面&#xff0c;周树人说过&#xff1a;由奢入俭难&#xff0c;下面我们一起折腾一下开源软件Vscode&#xff0c; 用以开发51和STM32&#xff0c;有错误之处&…

JVM类加载器面试题及原理

JVM只会运行二进制文件&#xff0c;类加载器的作用就是将字节码文件加载到JVM中&#xff0c;从而让Java程序能够启动起来。 1. 类加载器的种类 启动类加载器&#xff08;BootStrap ClassLoader&#xff09;&#xff1a;加载JAVA_HOME/jre/lib目录下的库扩展类加载器&#xff…

tomcat的安装与配置(包含在idea中配置tomcat)

Tomcat 是由 Apache 软件基金会开发的开源 Java Web 应用服务器&#xff0c;主要用于运行 Servlet 和 JSP&#xff08;JavaServer Pages&#xff09;程序。它属于轻量级应用服务器&#xff0c;适用于中小型系统及开发调试场景&#xff0c;尤其在处理动态内容&#xff08;如 Jav…

读书报告」网络安全防御实战--蓝军武器库

一眨眼&#xff0c;20天过去了&#xff0c;刷完了这本书「网络安全防御实战--蓝军武器库」&#xff0c;回味无穷&#xff0c;整理概览如下&#xff0c;可共同交流读书心得。在阅读本书的过程中&#xff0c;我深刻感受到网络安全防御是一个综合性、复杂性极高的领域。蓝军需要掌…

【芯片验证】verificationguide上的36道UVM面试题

跟上一篇一样,verificationguide上的36到UVM面试题,通义回答ds判卷。 1. What is uvm_transaction, uvm_seq_item, uvm_object, uvm_component? uvm_transaction、uvm_seq_item、uvm_object、uvm_component是什么? uvm_transaction是UVM中所有事务的基础类,用于表示仿真…

基于深度文档理解的开源 RAG 引擎RAGFlow的介绍和安装

目录 前言1. RAGFlow 简介1.1 什么是 RAGFlow&#xff1f;1.2 RAGFlow 的核心特点 2. RAGFlow 的安装与配置2.1 硬件与软件要求2.2 下载 RAGFlow 源码2.3 源码编译 Docker 镜像2.4 设置完整版&#xff08;包含 embedding 模型&#xff09;2.5 运行 RAGFlow 3. RAGFlow 的应用场…

用Deepseek写一个五子棋微信小程序

在当今快节奏的生活中&#xff0c;休闲小游戏成为了许多人放松心情的好选择。五子棋作为一款经典的策略游戏&#xff0c;不仅规则简单&#xff0c;还能锻炼思维。最近&#xff0c;我借助 DeepSeek 的帮助&#xff0c;开发了一款五子棋微信小程序。在这篇文章中&#xff0c;我将…