(golang)切片何时会创建新切片或影响原切片

什么时候切片操作会影响原切片
// 1.切片后没有触发slice的扩容机制时
什么时候对切片操作会创建新切片不影响原切片
// 2.对切片头元素进行截取的时候
// 3.当使用append时,len > cap则会触发扩容机制

前置:


//slice结构体
type SliceHeader struct {Data unsafe.Pointer // 指向底层数组的指针Len  int    // 切片的长度Cap  int    // 切片的容量
}

代码:

package mainimport ("fmt""reflect""unsafe"
)// 什么时候切片操作会影响原切片
// case1.切片后没有触发slice的扩容机制时
// 什么时候对切片操作会创建新切片不影响原切片
// case2.对切片头元素进行截取的时候
// case3.当使用append时,len > cap则会触发扩容机制func main() {s := make([]int, 5)case1(s)PrintSliceStruct(&s)case2(s)PrintSliceStruct(&s)case3(s)PrintSliceStruct(&s)
}
func case1(s []int) { //没有触发slice扩容,原切片值发生了变化s[1] = 1PrintSliceStruct(&s)
}
func case2(s []int) { //此时截取了切片第二个元素,unsafe.pointer发生变化,创建新切片s = s[1:2]PrintSliceStruct(&s)
}// 追加元素后,len > cap切片触发扩容机制
func case3(s []int) {s = append(s, 0) // 往原切片追加元s素0,此时len为5+1,cap为5,len >cap,触发扩容s[1] = 1PrintSliceStruct(&s)
}func PrintSliceStruct(s *[]int) {ss := (*reflect.SliceHeader)(unsafe.Pointer(s))fmt.Printf("slice struct: %+v, slice is %v\n", ss, *s)
}

输出结果:
在这里插入图片描述

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

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

相关文章

指针篇章-(4)+qsort函数的模拟

学习目录 ———————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————…

​知识图谱:基于嵌入的模型(TransE 、TransH、TransR和TransD)

(一)TransE: Translating Embeddings for Modeling Multi-relational Data. Antoine Bordes, Nicolas Usunier, Alberto Garcia-Duran, Jason Weston, Oksana Yakhnenko. NIPS 2013. 论文地址:http://papers.nips.cc/paper/5071-translating-embeddings-for-modeling-multi-…

[论文笔记]跨语言摘要最新综述:典型挑战及解决方案

https://arxiv.org/abs/2203.12515 跨语言摘要是指为给定的一种语言(例如中文)的文档生成另一种语言(例如英文)的摘要。 图1:四个端到端框架的概述。XLS:跨语言摘要;MT:机器翻译;MS:单语摘要。虚线箭头表示监督信号。无框彩色方块表示相应任务的输入或输出…

Deep Learning for Detecting Robotic Grasps

链接:1301.3592.pdf (arxiv.org) 这个用于从单一RGB-D视图进行机器人抓取检测的算法包括以下步骤: 图像获取: 机器人获取包含待抓取对象的场景的RGB-D图像。 抓取评分: 使用小型深度网络对RGB-D图像中的潜在抓取进行评分。抓取以在…

如何才能做一名渗透测试人员?

学习实践,目前只有这路子,自学9月,成功入圈。下面说一下自己的学习路径,都是摸爬滚打,交了N份钱才学会的。 切记一定要先了解整个渗透测试的流程,记住整个流程口诀:信息收集&打点&#xff…

Linux:进程

进程 知识铺垫冯诺依曼体系结构操作系统(OS) 进程概念进程的查看ps 命令获取进程 pid文件内查看进程终止进程的方式kill命令快捷键 进程的创建 forkfork 返回值问题 进程状态运行状态 :R休眠状态:S (可中断&#xff09…

Python实用工具:三维坐标点的键值对数组的值替换功能

环境和包: 环境 python:python-3.12.0-amd64包: matplotlib 3.8.2 代码: # 定义数据列表 data [{x: 9000.00, y: 0.00, z: 28209.83},{x: 8950.70, y: 940.76, z: 28209.83},{x: 8803.33, y: 1871.21, z: 28209.83},{x: 8559.51, y: 2781.15, z: 28209.83},{x: 8221.91, y: …

Vue源码系列讲解——内置组件篇【一】(keep-alive)

目录 1. 前言 2 用法回顾 3. 实现原理 props created destroyed mounted render 4. 生命周期钩子 5. 总结 1. 前言 <keep-alive> 是 Vue 实现的一个内置组件&#xff0c;也就是说 Vue 源码不仅实现了一套组件化的机制&#xff0c;也实现了一些内置组件&#xf…

数据集生成 YOLOV5 可训练的数据目录、并且可视化

1、前言 YOLOV5 训练数据的目录结构如下&#xff1a; 如果有测试集的话&#xff0c;也按照下面目录摆放即可 注意&#xff1a;这里的图片和标签文件名要严格对应&#xff01;&#xff01;后缀除外 关于YOLOv5介绍或者yolo格式的介绍参考之前专栏&#xff0c; 2、划分数据生成…

SpringMVC04、Controller 及 RestFul

4、Controller 及 RestFul 4.1、控制器Controller 控制器复杂提供访问应用程序的行为&#xff0c;通常通过接口定义或注解定义两种方法实现。控制器负责解析用户的请求并将其转换为一个模型。在Spring MVC中一个控制器类可以包含多个方法在Spring MVC中&#xff0c;对于Contr…

http协议中的强缓存与协商缓存,带图详解

此篇抽自本人之前的文章&#xff1a;http面试题整理 。 别急着跳转&#xff0c;先把缓存知识学会了~ http中的缓存分为两种&#xff1a;强缓存、协商缓存。 强缓存 响应头中的 status 是 200&#xff0c;相关字段有expires&#xff08;http1.0&#xff09;,cache-control&…

C++ :内存管理 newdelete

目录 内存区域划分 C的动态内存的管理方式 new new的基本使用方法 【注意事项】 delete 【注意】 new和delete操作自定义类型 operator new 和 operator delete 【关于自定义类型new申请内存】 【原理】 【调用顺序】 【连续开辟空间问题】 malloc/free和…

基于UC3842的开关电源设计

基于UC3842的开关电源设计 摘要 在现代经济和科技的飞速发展的时代&#xff0c;电源的运用已经变得非常常见。目前&#xff0c;各种科技手段正在推动着电力电子技术和电源设备研发技术的快速发展&#xff0c;同时也促使电源设备向着高频化集成化方向发展。电源供电设备的开发和…

动态规划课堂5-----子序列问题(动态规划 + 哈希表)

目录 引言&#xff1a; 例题1&#xff1a;最长递增子序列 例题2&#xff1a;最长定差子序列 例题3&#xff1a;最长的斐波那契子序列的长度 例题4&#xff1a;最长等差数列 例题5&#xff1a;等差数列划分II-子序列 结语&#xff1a; 引言&#xff1a; 要想解决子序列问…

亚信安慧AntDB的超融合之路

在面对较大用户规模的系统建设需求时&#xff0c;传统数据库往往面临诸多挑战。为了满足多样化的技术要求&#xff0c;项目通常需要倚赖多套技术体系&#xff0c;例如&#xff0c;一套关系型数据库用于元数据管理和标签化管理&#xff0c;另一套则专注于非结构化文件的处理。这…

OWASP Top 10 网络安全10大漏洞——A03:2021-注入

10大Web应用程序安全风险 2021年top10中有三个新类别、四个类别的命名和范围变化&#xff0c;以及一些合并。 A03:2021-注入 Injection从第一的位置滑落至第三位置。94% 的应用程序针对某种形式的注入进行了测试&#xff0c;最大发生率为 19%&#xff0c;平均发生率为 3%&a…

STM32CubeMX学习笔记19——SD卡(SDIO接口)

1、简介 1.1 SD卡简介 很多单片机系统都需要大容量存储设备&#xff0c;以存储数据&#xff08;常用的有U盘、FLASH芯片、SD卡等&#xff09;&#xff0c;比较而言SD卡是单片机大容量外部存储的首选&#xff0c;只需要少数几个IO口即可外扩一个容量从几十M到几十G的&#xff…

力扣--动态规划/深度优先算法/回溯算法93.复原IP地址

这题主要用了动态规划和回溯算法。 动态规划数组初始化&#xff08;DP数组&#xff09;: 首先&#xff0c;创建一个二维数组dp&#xff0c;用于记录字符串中哪些部分是合法的IP地址。对字符串进行遍历&#xff0c;同时考虑每个可能的IP地址部分&#xff08;每部分由1到3个字符组…

共同聚焦空气污染治理,打造可持续发展未来|中联环保圈

在2024年全国生态环境保护工作会议上&#xff0c;我国生态环境部明确提出&#xff0c;“加强重点区域空气质量改善的监督帮扶和统筹强化监督”将成为未来生态环境保护工作的重中之重。这一战略方向的转变&#xff0c;清晰地展现了我国在空气污染治理政策上的优化和深化。 回顾2…

antd vue Tabs控件的使用

Ant Design Vue-------Tabs标签页 今天就讲讲Ant Design Vue下的控件----tabs 标签页 结合项目中的需求&#xff0c;讲一下该控件如何使用&#xff0c;需求&#xff1a; &#xff08;1&#xff09;竖排样式 &#xff08;2&#xff09;如何使用v-for绑定数据源 &#xff08;3…