当前位置: 首页 > 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 # 下…...

万象视界灵坛代码实例:使用Gradio快速搭建像素风Web UI,零前端开发经验可用

万象视界灵坛代码实例&#xff1a;使用Gradio快速搭建像素风Web UI&#xff0c;零前端开发经验可用 1. 项目概述 万象视界灵坛是一款基于OpenAI CLIP模型的多模态智能感知平台&#xff0c;它将复杂的语义对齐功能包装在充满游戏感的像素风界面中。这个项目最大的特点是完全不…...

intv_ai_mk11效果展示:中文古诗英译+文化注释+押韵风格选择(Shakespearean/Modern)

intv_ai_mk11效果展示&#xff1a;中文古诗英译文化注释押韵风格选择&#xff08;Shakespearean/Modern&#xff09; 1. 惊艳的中英古诗翻译能力 intv_ai_mk11在中文古诗翻译领域展现出令人惊叹的能力&#xff0c;不仅能准确传达原诗的意境&#xff0c;还能根据需求选择不同的…...

3个颠覆性用法:B站字幕提取工具如何改变你的视频创作流程

3个颠覆性用法&#xff1a;B站字幕提取工具如何改变你的视频创作流程 【免费下载链接】BiliBiliCCSubtitle 一个用于下载B站(哔哩哔哩)CC字幕及转换的工具; 项目地址: https://gitcode.com/gh_mirrors/bi/BiliBiliCCSubtitle 你是否曾经为了获取B站视频的字幕而烦恼&…...

CTF实战:手把手教你用fastcoll工具复现MD5碰撞攻击(附Python验证脚本)

CTF实战&#xff1a;手把手教你用fastcoll工具复现MD5碰撞攻击&#xff08;附Python验证脚本&#xff09; 在网络安全竞赛和渗透测试中&#xff0c;MD5碰撞攻击是一个经典且实用的技术点。本文将带你从零开始&#xff0c;完整复现MD5碰撞攻击的全过程&#xff0c;包括工具使用、…...

RIFE帧插值技术:视频增强领域的智能插帧解决方案

RIFE帧插值技术&#xff1a;视频增强领域的智能插帧解决方案 【免费下载链接】video2x A machine learning-based video super resolution and frame interpolation framework. Est. Hack the Valley II, 2018. 项目地址: https://gitcode.com/GitHub_Trending/vi/video2x …...

Qwen3.5-9B Java面试宝典生成器:动态定制八股文与场景题

Qwen3.5-9B Java面试宝典生成器&#xff1a;动态定制八股文与场景题 1. 为什么需要智能面试助手 Java开发者求职路上&#xff0c;最头疼的莫过于海量面试题的整理和记忆。传统方式要么依赖网上零散的八股文合集&#xff0c;要么自己手动整理知识点&#xff0c;效率低下且难以…...

保姆级教程:用Python复现MIT Cheetah的刚体模型与正运动学(附代码)

从零实现MIT Cheetah四足机器人刚体建模与运动学仿真 四足机器人一直是机器人领域的热门研究方向&#xff0c;而MIT Cheetah作为开源四足机器人中的佼佼者&#xff0c;其设计理念和算法实现值得每一位机器人爱好者深入研究。本文将带你从零开始&#xff0c;用Python完整实现MI…...

intv_ai_mk11保姆级教程:解决页面打开但生成慢、服务启动失败等6类问题

intv_ai_mk11保姆级教程&#xff1a;解决页面打开但生成慢、服务启动失败等6类问题 1. 快速了解intv_ai_mk11 intv_ai_mk11是一个基于Llama架构的中等规模文本生成模型&#xff0c;特别适合处理通用问答、文本改写、解释说明和简短创作等任务。这个镜像已经完成了本地部署&am…...

OpenMV串口数据收发实战:如何与Arduino/STM32稳定通信并解析指令

OpenMV与微控制器串口通信实战&#xff1a;从基础协议到工业级稳定性优化 在智能机器人、自动化检测设备等嵌入式视觉系统中&#xff0c;OpenMV常作为"视觉传感器"与主控微控制器&#xff08;如Arduino/STM32&#xff09;协同工作。我曾参与过一个AGV小车项目&#x…...

CBAM实战指南:如何通过通道与空间注意力提升CNN模型性能

1. 为什么你的CNN模型需要CBAM注意力模块 如果你正在使用卷积神经网络&#xff08;CNN&#xff09;处理图像分类任务&#xff0c;可能会遇到这样的困境&#xff1a;模型在训练集上表现不错&#xff0c;但测试集准确率始终卡在一个瓶颈。这时候不妨试试CBAM&#xff08;Convolu…...