当前位置: 首页 > news >正文

Go语言中的数组、切片和映射解析

目录

  • 数组
    • 数组的声明
    • 数组循环
  • 切片
    • 切片声明
    • 切片元素循环
  • 映射
    • Map的声明及初始化
    • Map的遍历

数组

数组存放的是固定长度、相同类型的数据,而且这些存放的元素是连续的。

数组的声明

例如声明一个整形数组:

array := [3]int{1, 2, 3}

在类型名前加 [] 中括号,并设置好长度,大括号中的元素用于初始化数组,需要注意的是数组的长度不同,即属于不同的类型。

如果所有元素都被初始化的数组,声明时可以省略数组长度,例如上述的数组可以不写长度:

array := []int{1, 2, 3}

数组循环

使用传统for进行数组遍历:

for i := 0; i < 3; i++ {fmt.Println(array[i])}

在这里插入图片描述
还有就是使用go中提供的for range循环,代码如下:

for i, v := range array {fmt.Println(i, v)}

range表达式返回的结果分别为索引与数值,如果返回值用不到可使用下划线丢弃掉。

切片

切片是基于数组实现的,它的底层就是一个数组。对数组任意分隔,就可以得到一个切片。切片是一个具备三个字段的数据结构,分别是指向数组的指针 data,长度 len 和容量 cap。

切片声明

使用 make 函数进行切片声明,声明一个元素类型为 int 的切片,长度是 4,make 函数还可以传入一个容量参数:

	slice := make([]int, 3)fmt.Println(slice)

我们进行打印默认是0。
在这里插入图片描述
传入容量:

slice := make([]int, 3, 5)

当然切片的容量不能比切片的长度小。
容量就是申请的内存空间,而长度是已经使用的内存空间,我们可以通过 append 函数往切片中追加元素,来使用空闲内存。

slice = append(slice, 1, 2)fmt.Println(slice)

在这里插入图片描述
通过结果可知直接追加到空闲内存上了。

切片元素循环

切片的循环和数组一模一样,常用的也是 for range 方式。

for i,v  := range slice {fmt.Println(i, v)}

在这里插入图片描述
输出的分别是切片的索引与数值。

映射

在 Go 语言中,map 是一个无序的 K-V 键值对集合,结构为 map[K]V。其中 K 对应 Key,V 对应 Value。map 中所有的 Key 必须具有相同的类型,Value 也同样,但 Key 和 Value 的类型可以不同。

Map的声明及初始化

可通过内置的 make 函数进行map的创建,并进行赋值,代码如下:

	map6 := make(map[string]int)map6["a"] = 1   

也可使用字面量的方式进行map的创建,并进行赋值操作,代码如下:

	map7 := map[string]int{}map7["b"] = 2

map 的 [] 操作符可以返回两个值,第一个是value,第二个是key,如果存在则返回true。示例如下:

	map7 := map[string]int{}map7["b"] = 2v, k := map7["b"]fmt.Println(v, k)

在这里插入图片描述

Map的遍历

在 Go 语言中,map 的遍历使用 for range 循环。
对于 map,for range 同样返回两个值,一个是key,一个是value。示例如下:

map6 := make(map[string]int)map6["a"] = 1map6["b"] = 2map6["c"] = 3for k, v := range map6 {fmt.Println(k, v)}

在这里插入图片描述
在这里插入图片描述
通过两张结果图可以看出map 的遍历是无序的,也就是说你每次遍历,键值对的顺序可能会不一样。

map的大小可以使用内置的 len 函数进行获取。

println(len(map6))

在这里插入图片描述

总结:
1.数组是具有固定长度和相同类型的数据集合。声明数组时需要指定数组的长度和元素类型,也可以省略长度以创建一个长度可变的数组。
2.切片是对数组的一个引用,它包含指向数组的指针、长度和容量信息。可以使用make函数创建切片,并使用append函数向切片追加元素。
3.映射是一个无序的键值对集合,键和值可以是不同的类型。可以使用内置的make函数或字面量方式创建映射,并使用for range循环遍历映射。
4.在Go语言中,可以使用传统的for循环或for range循环遍历数组和切片。for range循环返回键值对,可以用于遍历映射。
5.可以通过len函数获取映射的大小。

想了解更多go知识可以通过官网文档来进行学习。

相关文章:

Go语言中的数组、切片和映射解析

目录 数组数组的声明数组循环 切片切片声明切片元素循环 映射Map的声明及初始化Map的遍历 数组 数组存放的是固定长度、相同类型的数据&#xff0c;而且这些存放的元素是连续的。 数组的声明 例如声明一个整形数组&#xff1a; array : [3]int{1, 2, 3}在类型名前加 [] 中括…...

MySql学习笔记03——DQL(数据查询)基本命令

DQL 导入数据 首先使用use database进入数据库中&#xff0c;然后使用命令 source D:\mysql_learning\mysql_learning\document\bjpowernode.sql注意文件名不能有双引号&#xff0c;命令结尾没有分号。 SQL脚本 .sql文件是SQL脚本文件&#xff0c;它里面的内容都是SQL语句…...

操作系统的四大特性

一、并发性 指操作系统同时运行着多个程序&#xff0c;这些程序宏观上是同时运行的&#xff0c;但微观上其实是交替运行的 补充1&#xff1a;并发性区别于并行性 并发是指两个或多个事件在同一时间间隔内发生&#xff0c;事件宏观上是同时进行的&#xff0c;围观上市交替进行的…...

旅游攻略APP外包开发功能

旅游攻略APP是帮助旅行者计划和享受旅行的工具&#xff0c;下面列出了一些常见的旅游攻略APP功能&#xff0c;以及在上线这类应用时需要注意的问题&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 常见…...

Apollo在Java中的使用

本节主要讲解在普通的 Java 项目和 Spring Boot 中如何使用 Apollo。 普通 Java 项目中使用 加入 Apollo Client 的 Maven 依赖&#xff0c;代码如下所示。 <dependency><groupId>com.ctrip.framework.apollo</groupId><artifactId>apollo-client<…...

Elasticsearch 全文搜索引擎 ---- IK分词器

原理&#xff1a;分词的原理&#xff1a;二叉树 首先讲一下为什么要出这个文章&#xff0c;前面我们讲过分词方法&#xff1a;中文分词搜索 pscws&#xff08;感兴趣的同学可以去爬楼看一下&#xff09;&#xff0c;那为什么要讲IK分词&#xff1f;最主要的原因是&…...

Layer 2盛夏已至,StarkNet如何实现价值跃迁?

作者&#xff5c;Jason Jiang Layer 2概念在2023年夏天迎来爆发。Coinbase、ConsenSys等加密巨头纷纷下场&#xff0c;其部署的原生L2解决方案Base、Linea在过去两个月内相继完成主网上线&#xff1b;被誉为L2 四大天王之一的StarkNet也在夏天顺利完成“量子跃迁”升级&#x…...

KaiwuDB 受邀亮相 2023 中国国际“软博会”

8月31日&#xff0c;第二十五届中国国际软件博览会&#xff08;以下简称“软博会”&#xff09;在天津盛大开幕。KaiwuDB 受邀亮相展会&#xff0c;围绕“塑造软件新生态&#xff0c;赋能发展新变革”主题&#xff0c;重点展示自研分布式多模数据库及各大行业解决方案&#xff…...

RS-485/RS-422收发器电路 DP3085 国产低成本替代MAX3085

DP3085是5V、半双工、15kV ESD 保护的 RS-485/RS-422 收发器电路&#xff0c;电路内部包含一路驱动器和一路接收器。 DP3085具有增强的摆率限制&#xff0c;助于降低输出 EMI 以及不匹配的终端连接引起的反射&#xff0c;实现 500kbps 的无误码数据传输。 DP3085芯片接收器输入…...

R-which函数(带有arr.ind参数)

目录 一、which()函数 二、元素位置 一、which()函数 which()函数是R语言中的一个基础函数&#xff0c;用于返回满足指定条件的元素的位置或索引。 语法&#xff1a;which(x, arr.ind FALSE, useNames TRUE) 参数&#xff1a; - x&#xff1a;一个向量、数组或矩阵&#x…...

单片机通用学习-什么是时钟?

什么是时钟&#xff1f; 时钟是同步单片机系统各个部件工作时序的最小时间单位&#xff0c;时钟通过 CPU 控制&#xff0c;产生其他与时钟保持一定关系的同步控制信号&#xff0c;协调各部件的工作时序&#xff0c;没有时钟系统就崩溃了。 如 CPU 与存储器&#xff08;RAM&am…...

PCL入门(二):初识点云数据

目录 1. 点云数据2. 对点云数据的简单操作3. 结果 1. 点云数据 在pcl里面&#xff0c;定义了很多点云数据类型&#xff0c;比如PointXYZ、PointXYZI、PointXYZRGBA等等&#xff0c;每一个都可以看做是点云的一个点的数据。而整个点云的数据类型被定义为PointCloud。 以pcl::P…...

LeetCode 面试题 03.01. 三合一

文章目录 一、题目二、C# 题解 一、题目 三合一。描述如何只用一个数组来实现三个栈。 你应该实现push(stackNum, value)、pop(stackNum)、isEmpty(stackNum)、peek(stackNum)方法。stackNum表示栈下标&#xff0c;value表示压入的值。 构造函数会传入一个stackSize参数&#x…...

【WebSocketIndexedDB】node+WebSocketIndexedDB开发简易聊天室

序幕介绍&#xff1a; WebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议。 讲人话就是说&#xff1a;WebSocket 使得客户端和服务器之间的数据交换变得更加简单&#xff0c;在 WebSocket API 中&#xff0c;浏览器和服务器只需要完成一次握手&#x…...

【01】弄懂共识机制PoW

基于工作量证明机制的共识机制PoW&#xff08;Proof of Work&#xff09; 特点就是多劳多特 共识过程 一个区块链系统中&#xff0c;交易历经多个步骤才能得以上链&#xff0c;并且需要经过多个节点的验证。以下是这些步骤的详细叙述&#xff1a; 交易进入交易池&#xff08;内…...

QT C++ 基于TCP通信的网络聊天室

一、基本原理及流程 1&#xff09;知识回顾&#xff08;C语言中的TCP流程&#xff09; 2&#xff09;QT中的服务器端/客户端的操作流程 二、代码实现 1&#xff09;服务器 .ui .pro 在pro文件中添加network库 .h #ifndef WIDGET_H #define WIDGET_H#include <QWidget>…...

SpringMVC入门详细介绍

一. SpringMVC简介 Spring MVC是一个基于Java的实现了MVC设计模式的请求驱动类型的轻量级Web框架&#xff0c;通过把Model&#xff0c;View&#xff0c;Controller分离&#xff0c;将web层进行职责解耦&#xff0c;把复杂的web应用分成逻辑清晰的几部分&#xff0c;简化开发&a…...

R3LIVE源码解析(9) — R3LIVE中r3live_lio.cpp文件

目录 1 r3live_lio.cpp文件简介 2 r3live_lio.cpp源码解析 1 r3live_lio.cpp文件简介 在r3live.cpp文件中创建LIO线程后&#xff0c;R3LIVE中的LIO线程本质上整体流程和FAST-LIO2基本一致。 2 r3live_lio.cpp源码解析 函数最开始会进行一系列的声明和定义&#xff0c;发布的…...

如何高效的解析Json?

Json介绍 Json是一种数据格式&#xff0c;广泛应用在需要数据交互的场景Json由键值对组成每一个键值对的key是字符串类型每一个键值对的value是值类型(boo1值数字值字符串值)Array类型object类型Json灵活性他可以不断嵌套&#xff0c;数组的每个元素还可以是数组或者键值对键值…...

MySQL——分组查询

2023.9.4 MySQL 分组查询的学习笔记如下&#xff1a; #分组查询 /* 分组查询中的筛选条件分为两类&#xff1a;数据源 位置 关键字 分组前筛选 原始表 group by前面 where 分组后筛选 分组后的结果集 group by后面 having */ #查询每…...

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...

无法与IP建立连接,未能下载VSCode服务器

如题&#xff0c;在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈&#xff0c;发现是VSCode版本自动更新惹的祸&#xff01;&#xff01;&#xff01; 在VSCode的帮助->关于这里发现前几天VSCode自动更新了&#xff0c;我的版本号变成了1.100.3 才导致了远程连接出…...

解锁数据库简洁之道:FastAPI与SQLModel实战指南

在构建现代Web应用程序时&#xff0c;与数据库的交互无疑是核心环节。虽然传统的数据库操作方式&#xff08;如直接编写SQL语句与psycopg2交互&#xff09;赋予了我们精细的控制权&#xff0c;但在面对日益复杂的业务逻辑和快速迭代的需求时&#xff0c;这种方式的开发效率和可…...

剑指offer20_链表中环的入口节点

链表中环的入口节点 给定一个链表&#xff0c;若其中包含环&#xff0c;则输出环的入口节点。 若其中不包含环&#xff0c;则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...

Frozen-Flask :将 Flask 应用“冻结”为静态文件

Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是&#xff1a;将一个 Flask Web 应用生成成纯静态 HTML 文件&#xff0c;从而可以部署到静态网站托管服务上&#xff0c;如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...

IT供电系统绝缘监测及故障定位解决方案

随着新能源的快速发展&#xff0c;光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域&#xff0c;IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选&#xff0c;但在长期运行中&#xff0c;例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...

全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比

目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec&#xff1f; IPsec VPN 5.1 IPsec传输模式&#xff08;Transport Mode&#xff09; 5.2 IPsec隧道模式&#xff08;Tunne…...

项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)

Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败&#xff0c;具体原因是客户端发送了密码认证请求&#xff0c;但Redis服务器未设置密码 1.为Redis设置密码&#xff08;匹配客户端配置&#xff09; 步骤&#xff1a; 1&#xff09;.修…...

使用Spring AI和MCP协议构建图片搜索服务

目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式&#xff08;本地调用&#xff09; SSE模式&#xff08;远程调用&#xff09; 4. 注册工具提…...

Linux nano命令的基本使用

参考资料 GNU nanoを使いこなすnano基础 目录 一. 简介二. 文件打开2.1 普通方式打开文件2.2 只读方式打开文件 三. 文件查看3.1 打开文件时&#xff0c;显示行号3.2 翻页查看 四. 文件编辑4.1 Ctrl K 复制 和 Ctrl U 粘贴4.2 Alt/Esc U 撤回 五. 文件保存与退出5.1 Ctrl …...