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

Go语言:数组和切片

  Python中的数组(这里指的是List类型)及其切片Slice基本相同,但在Go语言中这两者差别很大。

1 数组

Go语言中的数组(Array)存放的是长度固定、类型固定并且存储位置连续的一系列元素。

1.1 声明

Go语言中数组的声明方式如下:

	arr1 := [5]string{"a", "b", "c", "d", "e"}arr2 := [...]string{"g", "h", "i"} //自动推导出数组长度,省略号不可忽略arr3 := [5]string{1: "j", 2: "k"}  //指定索引为1和2的元素值,其余默认为空arr4 := [100]int{} //创建一个保存1到100的整数的数组for i := 0; i < len(arr4); i++ {arr4[i] = i + 1}
1.2 遍历

Go语言中数组的遍历可以使用range。具体如下:

package mainimport ("fmt""strconv"
)func main() {arr0 := [3]string{"hello", "nihao", "dajiahao"}for i, v := range arr0 {fmt.Println("数组arr0的第" + strconv.Itoa(i) + "个元素为:" + v)}arr1 := [100]int{} //创建一个保存1到100的整数的数组for i := 0; i < len(arr1); i++ {arr1[i] = i + 1}sum1 := 0 //计算1+2+3+……+100for _, v := range arr1 {sum1 += v}fmt.Println("1到100的相加总和为:" + strconv.Itoa(sum1))
}

2 切片

Go语言的切片虽然也是基于数组来实现的,但两者在使用上有些差别。

2.1 声明

Go语言中常用的切片的声明方法如下:

package main
import ("fmt""strconv"
)
func main() {array := [7]int{1, 2, 3, 4, 5, 6, 7}slice0 := array[2:6] //利用数组生成切片fmt.Println("slice0更改前:", slice0)slice0[1] = 10fmt.Println("slice0更改后:", slice0)fmt.Println("slice0更改后的array:", array)slice1 := []string{"a", "b", "c"} //中括号里面不要加...fmt.Println("切片slice1:", slice1)slice2 := make([]string, 4, 8) //声明一个长度为4,容量为8的空切片fmt.Println("切片slice2:", slice2)fmt.Println("切片slice2,长度为:" + strconv.Itoa(len(slice2)) + ",容量为:" + strconv.Itoa(cap(slice2)))
}

其执行结果如下:

slice0更改前: [3 4 5 6]
slice0更改后: [3 10 5 6]
slice0更改后的array: [1 2 3 10 5 6 7]
切片slice1: [a b c]
切片slice2: [ ]
切片slice2,长度为:4,容量为:8

关于切片有以下几点说明:

  • 利用数组生成的切片,切片和原数组指向的是同一片内存空间,所以对切片中的数据进行修改,底层数组的值也会跟着修改。
  • 切片的长度和容量不是一回事。Go语言给slice2分配了一块容量为8的内存空间,但目前只有4个内存空间有元素(“”)。
  • 切片的循环遍历方法与数组相同,这里不再详细介绍。
2.2 append函数

Go语言中的切片可以看作是不定长数组,可以通过append函数向切片中添加元素,返回新切片

package main
import "fmt"
func main() {slice2 := []string{"2", "3", "3"}slice3 := make([]string, 4, 8)fmt.Println("slice3的内存地址:", &slice3[0])slice4 := []string{"f", "g"}slice3 = append(slice3, slice4...)fmt.Println("slice3的内存地址:", &slice3[0])slice3 = append(slice3, slice2...)fmt.Println("slice3的内存地址:", &slice3[0])fmt.Println(slice3)
}

其执行结果如下:

slice3的内存地址: 0xc00011c000
slice3的内存地址: 0xc00011c000
slice3的内存地址: 0xc000122000
[ f g 2 3 3]

这里要注意以下几点:

  • append()中的参数可以是单个字符,也可以是切片类型,但不可以是数组。
  • 当切片的容量未满时,往切片内添加新的元素时,新元素会追加在原切片元素的后面。若切片容量满了,则会开辟一片新的内存空间。

相关文章:

Go语言:数组和切片

Python中的数组(这里指的是List类型)及其切片Slice基本相同&#xff0c;但在Go语言中这两者差别很大。 1 数组 Go语言中的数组(Array)存放的是长度固定、类型固定并且存储位置连续的一系列元素。 1.1 声明 Go语言中数组的声明方式如下&#xff1a; arr1 : [5]string{"…...

OPENCV 闭运算实验示例代码morphologyEx()函数

void CrelaxMyFriendDlg::OnBnClickedOk() {hdc this->GetDC()->GetSafeHdc();// TODO: 在此添加控件通知处理程序代码string imAddr "c:/Users/actorsun/Pictures/";string imAddr1 imAddr"rice.png";Mat relax, positive;relax imread(imAddr1…...

UE4 体积云制作 学习笔记

首先Noise本来就是一张噪点图 云的扰动不能太大&#xff0c;将Scale调小&#xff0c;并将InputMin调整为0 形成这样一张扰动图 扰动需要根据材质在世界的位置进行调整&#xff0c;所以Position需要加上WorldPosition 材质在不同世界位置&#xff0c;噪点不同 除以一个数&#…...

visual studio编译QtAV

1.1 依赖环境 第一种方法: 下载编译好的ffmpeg-3.4.2-win64-dev和ffmpeg-3.4.2-win64-shared,解压得到 D:\qt-workspace\ffmpeg-3.4.2-win64-dev D:\qt-workspace\ffmpeg-3.4.2-win64-shared 第二种方法: QtAV官方有提供编译好的依赖库 QtAV-depends-windows-x86%2Bx64.7…...

喜报!CACTER邮件安全网关荣获2023鲲鹏应用创新大赛广东赛区三等奖

近期&#xff0c;2023鲲鹏应用创新大赛广东赛区暨广东省信息技术应用创新产业联盟创新大赛圆满落幕&#xff0c;Coremail凭借“基于鲲鹏CPU的邮件网关一体机解决方案”&#xff0c;荣获“金融行业方向”三等奖。 ​ 鲲鹏凌粤 展翅湾区 本届大赛广东区域赛以“鲲鹏凌粤 展翅湾…...

Spark On Hive原理和配置

目录 一、Spark On Hive原理 &#xff08;1&#xff09;为什么要让Spark On Hive&#xff1f; 二、MySQL安装配置&#xff08;root用户&#xff09; &#xff08;1&#xff09;安装MySQL &#xff08;2&#xff09;启动MySQL设置开机启动 &#xff08;3&#xff09;修改MySQL…...

驱动第十天

...

工作中常用的git命令,千万不能忘

1、设置当前分支为默认分支: git branch –set-upstream-toorigin/master 2、To push the current branch and set the remote as upstream, use: git push --set-upstream origin eds_enhancement 3、同步远程分支 git remote update --prune [remote] 4、Remo…...

计组之存储系统

存储器概述 分类 1.按在计算机中的作用&#xff08;层次&#xff09;分类 主存储器。CPU可以直接随机地对其进行访问&#xff0c;也可以和高速缓冲存储器&#xff08;Cache)及辅助存储器交换数据。辅助存储器。辅存的内容需要调入主存后才能被CPU访问。高速缓冲存储器。位于…...

【Jenkins】新建任务FAQ

问题1. 源码管理处填入Repository URL&#xff0c;报错&#xff1a;无法连接仓库&#xff1a;Error performing git command: ls-remote -h https://github.com/txy2023/GolangLearning.git HEAD 原因&#xff1a; jenkins全局工具配置里默认没有添加git的路径&#xff0c;如果…...

生产环境使用boost::fiber

简介 boost::fiber是一类用户级线程&#xff0c;也就是纤程。其提供的例子与实际生产环境相距较远&#xff0c;本文将对其进行一定的改造&#xff0c;将其能够投入到生产环境。 同时由于纤程是具有传染性的&#xff0c;使用纤程的代码里也全部要用纤程封装&#xff0c;本文将对…...

TSINGSEE青犀AI视频识别技术+危化安全生产智慧监管方案

一、背景分析 石油与化学工业生产过程复杂多样&#xff0c;涉及的物料易燃易爆、有毒有害&#xff0c;生产条件多高温高压、低温负压&#xff0c;现场危险化学品存储量大、危险源集中&#xff0c;重特大安全事故多发。打造基于工业互联网的安全生产新型能力&#xff0c;提高危…...

小程序request请求封装

以上为本人的项目目录 1.首先在utils中创建request.js文件封装request请求&#xff0c;此封装带上了token&#xff0c;每次请求都会自带token&#xff0c;需要你从后端获取后利用wx.setStorageSync(token,返回的token),不使用的话就是空。 直接复制即可&#xff0c;需要改一下…...

Easy Javadoc插件的使用教程

目录 一、安装Easy Javadoc插件 二、配置注释模板 三、配置翻译 一、安装Easy Javadoc插件 在idea的File-Settings-Plugins中搜索Easy Javadoc插件&#xff0c;点击install进行安装&#xff0c;安装完成后需要restart IDE&#xff0c;重启后插件生效。 二、配置注释模板 …...

一篇文章让你弄懂Java中的方法

目录 1. 方法概念及使用 1.1 什么是方法(method) 1.2 方法定义 1.3 方法调用的执行过程 1.4 实参和形参的关系 1.5 没有返回值的方法 2. 方法重载 2.1 为什么需要方法重载 2.2 方法重载概念 2.3 方法签名 1. 方法概念及使用 1.1 什么是方法(method) 方法就是一…...

SAP MM学习笔记39 - MRP(资材所要量计划)

这一章开始&#xff0c;离开请求书&#xff0c;学点儿新知识啦。 MRP ( Material Requirement Planning ) - 资材所要量计划。 它的位置在下面的调达周期图上来看&#xff0c;就是右上角的 所要量决定那块儿。 1&#xff0c;MRP(资材所要量计划) 的概要 MRP 的主要目的就是 确…...

总线类设备驱动——IIC

目录 一、本章目标 二、IIC设备驱动 2.1 I2C协议简介 2.2 LinuxI2C驱动 2.3 I2C 设备驱动实例 一、本章目标 一条总线可以将多个设备连接在一起&#xff0c;提高了系统的可扩展性能。这个互联的系统通常由三部分组成:总线控制器、物理总线(一组信号线) 和设备。总线控制器…...

MES 的价值点之动态调度

随着数字化技术的发展&#xff0c;为制造企业的生产计划提供了更多的便利。但在实际生产管理过程中&#xff0c;企业的生产计划不管做的多么理想&#xff0c;还是可能会因诸多的扰动因素造成执行与计划差异&#xff0c;这时就需要通过一些动态调整方案去适应新的生产要求与环境…...

dfs序及相关例题

常用的三种dfs序 欧拉序 每经过一次该点记录一次的序列。 dfs序 记录入栈和出栈的序列。 dfn序 只记录入栈的序列。 dfs序 DFS 序列是指 DFS 调用过程中访问的节点编号的序列。 如何求dfs序&#xff1f;可以用以下代码来找dfs序。 vector<vector<int>> g(n…...

python入门实战:爬取图片到本地

简单记录一下爬取网站图片保存到本地指定目录过程,希望对刚入门的小伙伴有所帮助! 目标网站就是下图所示页面: 实现步骤: 1.爬取每页的图片地址集合 2.下载图片到本地 3. 获取指定页数的页面路径 以下是实现代码: import bs4 import requests import os # 下…...

0502光刻机破局 第五卷:EUV光源系统(S级 长期死磕突破)第2小节:国内外技术参数差距

第五卷&#xff1a;EUV光源系统&#xff08;S级 长期死磕突破&#xff09; 第2小节&#xff1a;国内外技术参数差距&#xff08;全量化对标&#xff0c;ASML vs 国产&#xff0c;死磕数据&#xff09; 前置硬核声明 本节100%量化、100%对标、100%无修饰&#xff0c;直接把 ASML…...

G-Helper深度解析:华硕笔记本的终极轻量级控制方案

G-Helper深度解析&#xff1a;华硕笔记本的终极轻量级控制方案 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Scar, ProArt, Vivobook, Zenbook, Exper…...

NotebookLM文档召回率骤降73%?(内部实验报告首次公开:BM25+SBERT混合排序实战框架)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;NotebookLM相似文档推荐 NotebookLM 是 Google 推出的基于用户上传文档构建个性化 AI 助手的实验性工具&#xff0c;其核心能力之一是“相似文档推荐”——即在用户提问时&#xff0c;自动从已导入的文…...

从原理到实战:晶体管开关电路设计与常见问题解析

1. 项目概述&#xff1a;为什么我们需要晶体管开关&#xff1f;如果你玩过Arduino或者树莓派&#xff0c;肯定遇到过这样的尴尬&#xff1a;想用单片机的一个GPIO引脚直接点亮一个12V的汽车大灯&#xff0c;或者驱动一个小马达&#xff0c;结果要么灯不亮&#xff0c;要么马达纹…...

手把手教你用TMS320F2803x DSP实现PMBus通信(附代码下载与避坑指南)

TMS320F2803x DSP实战&#xff1a;PMBus通信从零搭建到波形调试全攻略 1. 工程搭建与开发环境配置 在开始PMBus通信开发前&#xff0c;需要准备完整的软硬件环境。以下是基于TI C2000系列DSP的典型配置流程&#xff1a; 硬件准备清单&#xff1a; TMS320F2803x开发板&#xff0…...

质子CT技术:原理、系统设计与临床应用

1. 质子CT技术概述&#xff1a;从原理到临床需求在放射治疗领域&#xff0c;质子治疗因其独特的布拉格峰(Bragg Peak)特性而备受关注。与传统X射线治疗相比&#xff0c;质子束在组织中沉积的能量分布具有明显的物理优势——在射程末端释放最大剂量后迅速衰减。这一特性使得肿瘤…...

Cadence变种BOM实战:以IMU模块为例,打造多配置硬件设计流程

1. 从零理解变种BOM的核心价值 第一次接触变种BOM这个概念时&#xff0c;我正被一个IMU模块的项目折磨得焦头烂额。客户要求这个模块能支持五种不同的通信接口&#xff0c;还要可选配导航和RTC功能。这意味着我需要维护十几个不同版本的原理图和BOM表&#xff0c;每次修改都要同…...

Thanos剪枝算法:高效压缩大型语言模型的技术解析

1. 项目概述&#xff1a;Thanos剪枝算法解析在深度学习领域&#xff0c;大型语言模型&#xff08;LLM&#xff09;的参数量已突破千亿级别&#xff0c;这对计算资源和内存提出了极高要求。模型剪枝技术通过移除神经网络中的冗余连接&#xff0c;能在保持模型性能的同时显著降低…...

Spring AI + Ollama 深度实战:从 RAG 问答到 Graph Agent 全流程指南

场景 Spring AI RAG 检索增强生成&#xff1a;概念、实战与完整代码&#xff1a; https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/161055108 基于上面的基础&#xff0c;实现Graph工作流编排的简单示例。 大语言模型&#xff08;LLM&#xff09;在实际应用中面…...

WeChatExporter终极指南:三步破解iOS微信数据备份的技术迷思

WeChatExporter终极指南&#xff1a;三步破解iOS微信数据备份的技术迷思 【免费下载链接】WeChatExporter 一个可以快速导出、查看你的微信聊天记录的工具 项目地址: https://gitcode.com/gh_mirrors/wec/WeChatExporter 你是否曾因误删重要微信聊天记录而懊恼不已&…...