Golang 切片相关笔记

文章目录

  • 关于切片的扩容问题
    • 切片的创建
    • 切片的扩容
    • 切片的缩容

关于切片的扩容问题

  如果在程序中出现下列提示:说明你建立的切片容量不够,超出索引:

panic: runtime error: index out of range [0] with length 0

切片的创建

  Go 语言中的切片是一种动态数组,它可以自动扩容和缩容以适应不同的数据量。在实际开发中,了解切片的扩容和缩容机制对于优化内存使用和提高程序性能至关重要。
切片的创建方式一般来说有三种

//1.通过数组的切割进行切片的建立
nums:=[5]int{1,2,3}//初始化一个切片实例
slice:=nums[:]//注意切割无论是切割数组还是切片都是**``左闭右开``**
//var slice []int//2.声明切片并初始化
//2.1
var slice []int//这种方式初始化的切片并未自动分配内存,**``长度和容量都为0``**
//2.2
slice:=[]int{1,2,3}//声明并初始化//3.通过make函数进行建立 推荐※※
slice:=make([]int,3,5)//第一个参数是长度,第二个参数是容量

切片的扩容

  golang中当向切片中添加元素时,如果切片的容量不足,就会触发切片的扩容机制。

切片的扩容会分配一个新的数组,并将原来的元素复制到新数组中。

  新数组的长度通常是原数组长度的两倍,但是如果原数组长度小于 1024,新数组的长度会比原数组长度大 1 倍;如果原数组长度大于等于 1024,新数组的长度会比原数组长度大 1/4 倍。
  切片的扩容可以通过内置函数 append 来实现。当切片容量不足时,调用 append 函数会触发切片的扩容。

append函数签名如下:
func Append(slice []int, items …int) []int

切片的缩容

  当从切片中删除元素时,如果切片的长度小于容量的 1/4,就会触发切片的缩容机制。切片的缩容会释放底层数组中未使用的空间。新数组的长度通常是原数组长度的一半,但是如果原数组长度小于 1024,新数组的长度等于原数组长度;如果原数组长度大于等于 1024,新数组的长度会比原数组长度小 1/2 倍。

  切片的缩容不需要显式调用任何函数,Go 语言的垃圾回收机制会自动进行。
  切片的缩容使用我们前面提到的切割即可实现

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

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

相关文章

JS实现日历表

有需要的可以用一下&#xff0c;这是一个简单的demo. HTML&#xff1a; <table><thead><tr><th colspan"2"><span class"left"></span></th><th colspan"3"><span class"time"&g…

湖南开放大学形成性考核 平时作业 统一资料 参考

卷代号&#xff1a;1282 社会学概论&#xff08;本&#xff09; 参考试题 一、单项选择题&#xff08;在各题的备选答案中&#xff0c;只有1项是正确的&#xff0c;请将正确答案的序号&#xff0c;填写在题中的括号内。每题1分&#xff0c;共10分&#xff09; 1.从20世纪30年代…

【快速应用开发】看看RedwoodJS

自我介绍 做一个简单介绍&#xff0c;酒架年近48 &#xff0c;有20多年IT工作经历&#xff0c;目前在一家500强做企业架构&#xff0e;因为工作需要&#xff0c;另外也因为兴趣涉猎比较广&#xff0c;为了自己学习建立了三个博客&#xff0c;分别是【全球IT瞭望】&#xff0c;【…

vue3+vite4中使用svg,使用iconfont-svg图标

记录一下vue3中如何使用svg图标&#xff0c;vue2中大家常用iconfont字体图标&#xff0c;现在vue3大家都又推荐svg的方式使用图表&#xff0c;包括elementplus组件库也变成使用svg方式引用图标。 1、创建svg组件 components/IconSvg.vue <template><svg class"…

保障事务隔离级别的关键措施

目录 引言 1. 锁机制的应用 2. 多版本并发控制&#xff08;MVCC&#xff09;的实现 3. 事务日志的记录与恢复 4. 数据库引擎的实现策略 结论 引言 事务隔离级别是数据库管理系统&#xff08;DBMS&#xff09;中的一个关键概念&#xff0c;用于控制并发事务之间的可见性。…

爱名网被评为“最佳安全保障注册服务机构”

12月12日&#xff0c;由中国互联网络信息中心主办&#xff0c;中国科学院计算机网络信息中心、中国工业互联网研究院、中国互联网协会联合主办&#xff0c;人民邮电报社承办的第四届中国互联网基础资源大会&#xff08;CNIRC&#xff09;在北京举办。 在本届大会上&#xff0c…

网络镜像 -- 本地端口镜像

网络镜像 网络镜像技术允许复制和记录在计算机网络上传输的数据流量&#xff0c;可以将交换机中一个端口的流量复制到另一个端口。 网络镜像广泛用于抓包监控。 用一个场景来举例&#xff1a; 如图&#xff0c;PC1、2、3分别是三台主机&#xff0c;与Switch交换机对应端口…

Mac 如何删除文件及文件夹?可以尝试使用终端进行删除

MacOS 是 Mac 电脑采用的操作系统&#xff0c;你知道 Mac 如何删除文件吗&#xff1f;除了直接将文件或者文件夹拖入废纸篓之外&#xff0c;我们还可以采用终端命令的办法去删除文件&#xff0c;本文为大家总结了 Mac 删除文件方法。 为何使用命令行删除文件 在使用 Mac 电脑…

训练效率提升40倍!开源图片生3D模型,Stable Zero123来啦

12月14日&#xff0c;著名生成式AI开源平台Stability.ai在官网开源了&#xff0c;图片生成高质量3D模型——Stable Zero123。 Stable Zero123是基于今年3月&#xff0c;丰田研究院和哥伦比亚大学联合开源的Zero123模型开发而成。主要通过更改渲染数据集和分数蒸馏对模型进行了…

【复杂gRPC之Java调用go】

1 注意点 一般上来说如果java调用java的话&#xff0c;我们可以使用springcloud来做&#xff0c;而面对这种跨语言的情况下&#xff0c;gRPC就展现出了他的优势。 代码放在这了&#xff0c;请结合前面的go服务器端一起使用 https://gitee.com/guo-zonghao/java-client-grpc /…

实战章节:在Linux上部署各类软件

详细资料见文章的资源绑定 一、前言 1.1 为什么学习各类软件在Linux上的部署 在前面&#xff0c;我们学习了许多的Linux命令和高级技巧&#xff0c;这些知识点比较零散&#xff0c;同学们跟随着课程的内容进行练习虽然可以基础掌握这些命令和技巧的使用&#xff0c;但是并没…

算法-只出现一次的数字集合

前言 仅记录学习笔记&#xff0c;如有错误欢迎指正。 题目 记录一道面试过的题目 题目如下&#xff1a; 给定一个数组&#xff0c;内容为1-n的数字&#xff0c;其中每个数字只会出现一次或者多次&#xff0c;请在时间复杂度O(n),空间复杂度O(1)的条件下找出所有出现一次的数…

事务隔离级别:保障数据库并发事务的一致性与性能

目录 引言 1. 事务隔离级别概述 2. 读未提交隔离级别 3. 读已提交隔离级别 4. 可重复读隔离级别 5. 串行化隔离级别 6. 保障事务隔离级别的机制 7. 如何选择合适的隔离级别 8. 结语 引言 在数据库管理系统&#xff08;DBMS&#xff09;中&#xff0c;事务隔离级别是一…

Redisson分布式锁原理分析

1.Redisson实现分布式锁 在分布式系统中&#xff0c;涉及到多个实例对同一资源加锁的情况&#xff0c;传统的synchronized、ReentrantLock等单进程加锁的API就不再适用&#xff0c;此时就需要使用分布式锁来保证多服务之间加锁的安全性。 常见的分布式锁的实现方式有&#xff…

【SpringBoot2】idea 上 gradle build 报 lombok 注释类有 “错误: 找不到符号“

jwensh2023.12.11 问题 idea springboot 2.7 gradle 7.6 的 build.gradle 中引入了 lombok implementation group: org.projectlombok, name: lombok, version: 1.18.2 在 pojo 上使用 Data、AllArgsConstructor、NoArgsConstructor Data AllArgsConstructor NoArgsConstruc…

PyTorch 模型训练性能大揭秘:从基础到高级技巧一网打尽!

PyTorch 是一个开源的 Python 机器学习库&#xff0c;基于Torch&#xff0c;用于自然语言处理等应用程序。 PyTorch既可以看作加入了GPU支持的numpy&#xff0c;也可以看成一个拥有自动求导功能的强大的深度神经网络&#xff0c;同时它也是大模型开发的首选工具。 《PyTorch模…

不用再找,这是大模型 LLM 微调经验最全总结

大家好&#xff0c;今天对大模型微调项目代码进行了重构&#xff0c;支持ChatGLM和ChatGLM2模型微调的切换&#xff0c;增加了代码的可读性&#xff0c;并且支持Freeze方法、Lora方法、P-Tuning方法、「全量参数方法」 微调。 PS&#xff1a;在对Chat类模型进行SFT时&#xff…

提升前端效率:掌握防抖与节流

目录 概念 代码实现 区别 应用场景 概念 当涉及到处理高频事件时&#xff0c;防抖&#xff08;Debounce&#xff09;和节流&#xff08;Throttle&#xff09;成为关键的工具。它们的作用是优化函数的执行频率&#xff0c;特别是在处理浏览器事件&#xff08;如resize、scro…

UDP网络编程其他相关事项

netstat指令 netstat -an 可以查看当前主机网络情况&#xff0c;包括端口监听情况和网络连接情况。 netstat -an | more 可以分页显示。 要求在dos控制台下执行。 说明&#xff1a;&#xff08;1&#xff09;Listening表示某个端口在监听&#xff1b;&#xff08;2&#xf…

binkw32.dll丢失怎么办?这5个方法都可以解决binkw32.dll丢失问题

binkw32.dll文件是什么&#xff1f; binkw32.dll是一个动态链接库文件&#xff0c;它是Windows操作系统中的一个重要组件。它包含了许多用于处理多媒体文件的函数和资源&#xff0c;如视频、音频等。当我们在电脑上打开或播放某些多媒体文件时&#xff0c;系统会调用binkw32.d…