Go Slice 使用中的小陷阱
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 使用中的小陷阱相关推荐
- C++ string中的几个小陷阱,你掉进过吗?
C++开发的项目难免会用到STL的string.使用管理都比char数组(指针)方便的多,但在得心应手的使用过程中也要警惕几个小陷阱,避免我们项目出bug却迟迟找不到原因. 1. 结构体中的stri ...
- 提防iostream使用中的一个“陷阱”
提防iostream使用中的一个"陷阱" 先看下面的示例代码: template < typename T > void test() { T o; for(T i ...
- android ge模拟器,在Android模拟器上的一些小陷阱
从Android SDK R17开始,模拟器就支持OpenGL ES 2.如果能让KlayGE在模拟器上跑起来,开发和测试就能方便许多.于是我装了最新的R21和Android 2.1的ARM v7a的 ...
- Excel数据表格“”连字符4种在使用中的小技巧
程序代码园发文地址:null小说,Java,HTML,Java小工具,程序代码园,http://www.byqws.com/ ,Excel数据表格"&"连字符4种在使用中的 ...
- ln 软连接 linux大棚,ln命令小陷阱
[ln命令小陷阱]的更多相关文章 一个文件夹下面的文件结构是 -dir1 -assetsdir -subdir1 -subdir2 这个时候如果我想在subdir1和subdir2下面分别创建asse ...
- ESXi与物理交换机静态链路聚合配置过程中的小陷阱
作者:陆斌 文章来自微信公众号:平台人生 内容简介:ESXi与物理交换机之间配置静态链路聚合时,因为静态链路聚合的特点,在进行down网卡和从虚拟交换机移除网卡的操作时,可能会无法完成故障流量切换,影 ...
- C 强制类型转换 char转int的小陷阱
今天遇到一个小陷阱. 本来想看一个字符转成整型之后对应的值,结果竟意外的发现,转成的整型大于256.我:????字符不是只有一个字节么? 我把这个字符的前后字符都置0,结果还是一样.我就懵逼了.一查才 ...
- MATLAB的polt的使用中的小问题
MATLAB的polt画图的使用中的小问题 问题1 x = 0:pi/100:2*pi; 两个冒号之间是步长 X取值为0-π,中间分为200份,每份步长为π/100 问题2 meshgrid(-2:. ...
- 有效率的使用计算机,【高效生活】计算机使用中的小技巧
原标题:[高效生活]计算机使用中的小技巧 有时候,选择比努力更重要. 前言 天下大事,必作于细.平时一些不起眼的细枝末节,却在不知不觉中发挥着巨大的作用.之前,通过在网易博客上分享梦甜姐的浏览器使用技 ...
最新文章
- (转)RTSP协议详解
- [转载]ArcMap中如何自制符号库(二)
- 144显示器只有60_HKC IG27电竞显示器体验:27英寸+IPS+144Hz,千元平民价值不值?...
- Form的is_valid校验规则及验证顺序
- 齐浩亮 计算机科学与技术,齐浩亮
- 详解-OTUS(大津法-最大类间方差)原理及C语言代码实现
- Java基础学习总结(181)——Nacos、Apollo、Config配置中心如何选型?
- Java的反射机制(Reflection)
- Bailian2796 Bailian3681 数字求和【入门】
- DS8700 的CPU、缓存的选择及配置
- 成功 打不开_switch商店打不开怎么办?手把手教你用这五种方法成功进入eshop
- win7锁定桌面计算机图标,Win7锁定桌面图标的详细步骤(图文)
- java程序员中英文简历_2017java程序员英文简历范文
- 接口测试系列之——接口安全测试
- XP框架开启debug模式_win10 2004系统如何开启夜间护眼模式的问题
- idea编辑区左侧行号背景颜色修改
- 购物车的实现——淘淘商城(二十六)
- echarts 柱状图如何不顶格_echarts图表的使用经验总结(避免踩坑)
- python 单词拆音节_计算一个单词的音节数
- 这5个“减压”小妙招,在你负重前行的路上会用到!