先看底层流程图


看如下代码:

package mainimport "fmt"func main() {//第一个现象a := make([]int, 0)b := []int{1, 2, 3}fmt.Println(copy(a, b))fmt.Println(a)//造成这个现象的原因是不会去扩展a的空间//第二个现象,修改切片的时候,影响了原来的数组的内容c := b[:]//c[0] = 8fmt.Println(b)fmt.Println(c)//他们的底层指向了同一块内存//第三个现象c = append(c, 9)fmt.Println(b) //append没有影响到原来的数组fmt.Println(c)c[0] = 8fmt.Println(b)fmt.Println(c) //为什么append函数之后再调用c[0] = 8,不会影响到原来的数组呢?因为产生了扩容,扩容机制一旦产生就会产生新的地址//有一个问题会影响原来的数组////第四个现象fmt.Println(len(c))fmt.Println(cap(c)) //cap指的是容量  长度和容量的各自意义//切片底层是由数组实现的,既要使用数组,又要满足动态的功能//假设有一个值,实际上申请数组的时候可能是两个,如果后续要增加数组,那么就直接增加到数据的结尾,这个时候不需要额外重新申请//切片又不同的初始化方式//注意:使用make方法初始化,不会预留空间d := make([]int, 5)fmt.Printf("len = %d,cap = %d\n", len(d), cap(d))//第二种方式,通过数组取切片Data := [10]int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}slice := Data[2:4]for index, value := range slice {fmt.Println(index, value)}fmt.Printf("len:%d cap:%d", len(slice), cap(slice))//切片的扩容问题,扩容阶段,会影响速度old_slice := make([]int, 0)fmt.Println("len = %d,cap = %d\n", len(old_slice), cap(old_slice))
}

go语言slice使用的时候遇到的奇怪现象以及分析相关推荐

  1. Go语言slice详解

    Go语言slice详解 Go语言中的slice表示一个具有相同类型元素的可变长序列,语言本身提供了两个操作方法: 创建:make([]T,len,cap) 追加: append(slice, T -) ...

  2. Rust语言- Slice(切片)类型([u8])

    文章目录 Rust语言- Slice(切片)类型(&[u8]) 动态类型(Dynamically Sized Types) 字符串字面值 Rust中的String与str 字符串切片 非字符串 ...

  3. R语言splines包构建基于logistic回归的自然样条分析:南非心脏病数据集、非线性:基函数展开和样条分析、你简单分析的不重要特征,可能只是线性不显著、而非线性是显著的

    R语言splines包构建基于logistic回归的自然样条分析:南非心脏病数据集.非线性:基函数展开和样条分析.你简单分析的不重要特征,可能只是线性不显著.而非线性是显著的 目录

  4. c语言折半查找递归程序,C语言数据结构中二分查找递归非递归实现并分析

    C语言数据结构中二分查找递归非递归实现并分析 前言: 二分查找在有序数列的查找过程中算法复杂度低,并且效率很高.因此较为受我们追捧.其实二分查找算法,是一个很经典的算法.但是呢,又容易写错.因为总是考 ...

  5. R语言可视化回归模型的残差直方图并进行残差分析(Histogram of Residuals)

    R语言可视化回归模型的残差直方图并进行残差分析(Histogram of Residuals) 目录 R语言可视化回归模型的残差

  6. C++语言学习(十四)——C++类成员函数调用分析

    C++语言学习(十四)--C++类成员函数调用分析 一.C++成员函数 1.C++成员函数的编译 C++中的函数在编译时会根据命名空间.类.参数签名等信息进行重新命名,形成新的函数名.函数重命名的过程 ...

  7. Python语言的前景、方向、优势、就业情况分析

    ​​今天小编就Python语言的发展前景.选择方向.语言的优缺点以及就业情况来为大家系统的讲解一下Python这门语言,或许对还在犹豫迷茫中的你会有一些帮助~~~ Python语言的前景.方向.优势. ...

  8. Go 语言 Slice

    介绍 Go 语言切片是对数组的抽象. Go 数组的长度不可改变,在特定场景中这样的集合就不太适用,Go 中提供了一种灵活,功能强悍的内置类型切片("动态数组"),与数组相比切片的长 ...

  9. Golang语言slice实现原理及使用方法

    1. Slice实现原理 Slice依托数组实现,底层数组对用户屏蔽,在底层数组容量不足时可以实现自动重分配并生成新的Slice. 接下来按照实际使用场景分别介绍其实现机制. 源码包中src/runt ...

最新文章

  1. html设置团偏跟着移动,雷阵雨云团向东偏南移动,北京两地将有强降雨+7级大风+冰雹!...
  2. java web容器_Java Web容器安全
  3. NetBeans Java EE技巧8:持久性单元
  4. 【渝粤教育】电大中专财务管理与分析 (2)作业 题库
  5. Mycat分布式数据库架构解决方案--搭建MySQL读写分离环境--一主多从
  6. 读书笔记_Index
  7. 线程池引发的故障到底该怎么排查?
  8. 【数据结构】经典习题
  9. 1357:车厢调度 (栈)
  10. mysql服务账号密码忘记_windows mysql 账号密码忘了怎么办
  11. Android滑动切换页面Tab文字颜色发生渐变效果
  12. 长沙哪个服务器网速最快,5G网络湖南长沙首秀?网速是4G的60倍,快的让人无法想象...
  13. Oracle 重建TEMP表空间
  14. 学习加密(四)spring boot 使用RSA+AES混合加密,前后端传递参数加解密(方式一)
  15. 团队多人协作、研发协作、项目管理、敏捷开发协作平台
  16. acl 影响因子_计算机领域EI和SCI收录期刊、影响因子及国际会议
  17. python双色球游戏_python—模拟生成双色球号
  18. Netgear wndr3700v2 路由器刷OpenWrt打造全能服务器(二)刷OpenWrt
  19. memset的使用方法
  20. 谁是明星信息泄露背后的黑手?机票销售渠道?

热门文章

  1. 845B - Luba And The Ticket
  2. 6月8日云栖精选夜读:mac下eclipse配置tomcat无法启动问题
  3. 寻路优化(一)——二维地图上A*启发函数的设计探索
  4. PHP中多维数组var_dump展示不全
  5. JS中浮点数运算误差处理
  6. SharePoint2010 内容类型剖析(Content Type/ 內容類型)
  7. Python用20行代码实现一个验证码的输入与验证(完整源码)
  8. UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0xbd in position 198: illegal multibyte sequence
  9. linux usb hcd nak,第16章通用串行总线接口(USB)mpc83xx中文手册.doc
  10. jenkins支持PHP,jenkins发布php代码