go中的切片有两个特性:

  • 底层的数据结构是数组
type slice struct {array unsafe.Pointerlen   intcap   int
}

包括从切片和数组派生出来的切片都是公用一个底层数组的

  • 当往切片append的元素超过容量时,即len(s) < cap(s)时,底层的数组会重新分配一个容量更大的数组
  • make构造出来的切片,已经预先填充了len个零值元素了。

总而言之,对切片的更改都会影响到底层的数组结构,因此需要慎重。
动手做个实验:

package mainimport ("fmt"
)func double(s []int, count int) {fmt.Println("函数调用内切片的长度为", len(s), " 容量为", cap(s))for i:=0; i < count; i++ {s = append(s, 100) }for i, v := range s {s[i] = v * 2}
}func main() {s := make([]int, 5, 10)// 下面的赋值会改变s的底层数组,导致上面指定的容量10失效// s = []int{//   1, 2, 3, 4, 5,// }for i:=0; i < 5; i++ {s[i] = i + 1}fmt.Println("主函数内切片的长度为", len(s), " 容量为", cap(s))fmt.Println(s)double(s, 1)fmt.Println(s)// 添加超过切片容量的元素后,double函数内切片底层的数组重新分配了,和主函数外的切片的底层数组不是同一个了,因此对其修改不会影响到主函数切片的数值double(s, 10)fmt.Println(s)
}

转载于:https://www.cnblogs.com/linyihai/p/10625011.html

Go Slice 使用中的小陷阱相关推荐

  1. C++ string中的几个小陷阱,你掉进过吗?

    C++开发的项目难免会用到STL的string.使用管理都比char数组(指针)方便的多,但在得心应手的使用过程中也要警惕几个小陷阱,避免我们项目出bug却迟迟找不到原因. 1.  结构体中的stri ...

  2. 提防iostream使用中的一个“陷阱”

    提防iostream使用中的一个"陷阱" 先看下面的示例代码: template < typename T > void test() {  T o;  for(T i ...

  3. android ge模拟器,在Android模拟器上的一些小陷阱

    从Android SDK R17开始,模拟器就支持OpenGL ES 2.如果能让KlayGE在模拟器上跑起来,开发和测试就能方便许多.于是我装了最新的R21和Android 2.1的ARM v7a的 ...

  4. Excel数据表格“”连字符4种在使用中的小技巧

    程序代码园发文地址:null小说,Java,HTML,Java小工具,程序代码园,http://www.byqws.com/ ,Excel数据表格"&"连字符4种在使用中的 ...

  5. ln 软连接 linux大棚,ln命令小陷阱

    [ln命令小陷阱]的更多相关文章 一个文件夹下面的文件结构是 -dir1 -assetsdir -subdir1 -subdir2 这个时候如果我想在subdir1和subdir2下面分别创建asse ...

  6. ESXi与物理交换机静态链路聚合配置过程中的小陷阱

    作者:陆斌 文章来自微信公众号:平台人生 内容简介:ESXi与物理交换机之间配置静态链路聚合时,因为静态链路聚合的特点,在进行down网卡和从虚拟交换机移除网卡的操作时,可能会无法完成故障流量切换,影 ...

  7. C 强制类型转换 char转int的小陷阱

    今天遇到一个小陷阱. 本来想看一个字符转成整型之后对应的值,结果竟意外的发现,转成的整型大于256.我:????字符不是只有一个字节么? 我把这个字符的前后字符都置0,结果还是一样.我就懵逼了.一查才 ...

  8. MATLAB的polt的使用中的小问题

    MATLAB的polt画图的使用中的小问题 问题1 x = 0:pi/100:2*pi; 两个冒号之间是步长 X取值为0-π,中间分为200份,每份步长为π/100 问题2 meshgrid(-2:. ...

  9. 有效率的使用计算机,【高效生活】计算机使用中的小技巧

    原标题:[高效生活]计算机使用中的小技巧 有时候,选择比努力更重要. 前言 天下大事,必作于细.平时一些不起眼的细枝末节,却在不知不觉中发挥着巨大的作用.之前,通过在网易博客上分享梦甜姐的浏览器使用技 ...

最新文章

  1. (转)RTSP协议详解
  2. [转载]ArcMap中如何自制符号库(二)
  3. 144显示器只有60_HKC IG27电竞显示器体验:27英寸+IPS+144Hz,千元平民价值不值?...
  4. Form的is_valid校验规则及验证顺序
  5. 齐浩亮 计算机科学与技术,齐浩亮
  6. 详解-OTUS(大津法-最大类间方差)原理及C语言代码实现
  7. Java基础学习总结(181)——Nacos、Apollo、Config配置中心如何选型?
  8. Java的反射机制(Reflection)
  9. Bailian2796 Bailian3681 数字求和【入门】
  10. DS8700 的CPU、缓存的选择及配置
  11. 成功 打不开_switch商店打不开怎么办?手把手教你用这五种方法成功进入eshop
  12. win7锁定桌面计算机图标,Win7锁定桌面图标的详细步骤(图文)
  13. java程序员中英文简历_2017java程序员英文简历范文
  14. 接口测试系列之——接口安全测试
  15. XP框架开启debug模式_win10 2004系统如何开启夜间护眼模式的问题
  16. idea编辑区左侧行号背景颜色修改
  17. 购物车的实现——淘淘商城(二十六)
  18. echarts 柱状图如何不顶格_echarts图表的使用经验总结(避免踩坑)
  19. python 单词拆音节_计算一个单词的音节数
  20. 这5个“减压”小妙招,在你负重前行的路上会用到!

热门文章

  1. 数仓大法好!跨境电商 Shopee 的实时数仓之路
  2. PyFlink 在聚美优品的应用实践
  3. 基于vue2.0 + elementUI 后台管理平台
  4. pycharm中的数据库可视化
  5. 分类和回归的区别和联系
  6. ASP.NET状态管理之一(概括篇)
  7. oracle中表空间详解
  8. leetcode - 1024. 视频拼接
  9. 使用函数自调用实现将局部变量转换成全局变量
  10. 使用Spring Security进行自动登录验证