(二十六)golang--切片
基本介绍:
- 切片是数组的引用;
- 切片的使用和数组类似;
- 切片的长度是可以变化的;
- 切片的定义 var a []int,注意和数组定义的区别;
切片不仅可以使用len函数,还有cap函数来计算切片的容量;
切片在内存中的形式:



从该图我们可以得出:
- slice的确是一个引用类型;
- slice从底层来说,其实就是一个数据结构struct:
type slice sruct {
ptr *[2]int
len int
cap int
}
切片使用的三种方式:
- 即上面的对数组的操作;
- 通过make来创建切片;var slice []int = make([]int,4,20)三个参数分别是类型,长度,容量
- 定义一个切片,直接就指定数组;var slice []int = []int{1,3,5}
方式1和方式2的区别:
方式1是直接引用数组,这个数组是事先存在的,程序员是可见的;方式2通过make,make也会创建一个数组,是由切片在底层进行维护,对程序员是不可见的;
切片的遍历:与数组一样,也是有两种;
切片使用的注意事项:
- 切片定义后需要引用到一个数组或者make一个空间供切片使用;
- 切片之后可以继续切片;
- append内置函数,可以动态增加切片;
var slice []int = []int{1,2,3}
slice = append(slice,4,5,6)
slice = append(slice,slice...);注意三个...是固定操作
切片append底层原理分析:
(1)切片append本质上是对数组扩容;
(2)go语言会创建一个新的数组(扩容后)
(3)将slice原来包含的元素拷贝到新的数组;
(4)slice重新引用到新数组;
(5)新数组是在底层来维护的,程序员不可见;
切片的拷贝操作:
切片使用copy内置函数完成拷贝;
intArr和intArr2空间是相互独立的,相互之间不会影响;
若元素不够,则只拷贝一部分;


string和切片的关系:
(1)string底层实现是一个byte数组,因此string也可以进行切片;
(2)string是不可变的;
(3)如果要修改字符串,先要将string-->[]byte,或者[]rune-->修改-->重写装成string;要替换中文,用[]rune;

(二十六)golang--切片的更多相关文章
- Bootstrap <基础二十六>进度条
Bootstrap 进度条.在本教程中,你将看到如何使用 Bootstrap 创建加载.重定向或动作状态的进度条. Bootstrap 进度条使用 CSS3 过渡和动画来获得该效果.Internet ...
- Web 前端开发人员和设计师必读精华文章【系列二十六】
<Web 前端开发精华文章推荐>2014年第5期(总第26期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各类能够提升网站用户体验的优秀 jQuery 插件,展示前沿的 HTML5 ...
- 二十六:Struts2 和 spring整合
二十六:Struts2 和 spring整合 将项目名称为day29_02_struts2Spring下的scr目录下的Struts.xml文件拷贝到新项目的scr目录下 在新项目的WebRoot-- ...
- 二十六、Jcreator使用初步
摘自http://blog.csdn.net/liujun13579/article/details/7751464 二十六.Jcreator使用初步 Jcreator是一个小巧灵活的Java开发工具 ...
- WCF技术剖析之二十六:如何导出WCF服务的元数据(Metadata)[扩展篇]
原文:WCF技术剖析之二十六:如何导出WCF服务的元数据(Metadata)[扩展篇] 通过<实现篇>对WSDL元素和终结点三要素的之间的匹配关系的介绍,我们知道了WSDL的Binding ...
- WCF技术剖析之二十六:如何导出WCF服务的元数据(Metadata)[实现篇]
原文:WCF技术剖析之二十六:如何导出WCF服务的元数据(Metadata)[实现篇] 元数据的导出就是实现从ServiceEndpoint对象向MetadataSet对象转换的过程,在WCF元数据框 ...
- VMware vSphere 服务器虚拟化之二十六 桌面虚拟化之View Persona Management
VMware vSphere 服务器虚拟化之二十六 桌面虚拟化之View Persona Management 实验失败告终,启动VMware View Persona Management服务报10 ...
- 第一百二十六节,JavaScript,XPath操作xml节点
第一百二十六节,JavaScript,XPath操作xml节点 学习要点: 1.IE中的XPath 2.W3C中的XPath 3.XPath跨浏览器兼容 XPath是一种节点查找手段,对比之前使用标准 ...
- mysql进阶(二十六)MySQL 索引类型(初学者必看)
mysql进阶(二十六)MySQL 索引类型(初学者必看) 索引是快速搜索的关键.MySQL 索引的建立对于 MySQL 的高效运行是很重要的.下面介绍几种常见的 MySQL 索引类型. 在数 ...
- JAVA之旅(二十六)——装饰设计模式,继承和装饰的区别,LineNumberReader,自定义LineNumberReader,字节流读取操作,I/O复制图片
JAVA之旅(二十六)--装饰设计模式,继承和装饰的区别,LineNumberReader,自定义LineNumberReader,字节流读取操作,I/O复制图片 一.装饰设计模式 其实我们自定义re ...
随机推荐
- Ubuntu php + apache
Ubuntu 环境: 问题1: apache 不能解析 *.php 文件 安装apache的扩展模块 : apt-get install libapache2-mod-php 问题2 : 客户端访问 ...
- 素数与Miller-Rabin测试
素数及其性质 素数又称质数.指整数在一个大于 111 的自然数中,除了 111 和此整数自身外,没法被其他自然数整除的数. 性质1 有无穷多个素数. 证明: 用反证法.设已知的最大素数为 PPP,考虑 ...
- Cocos2d-x 学习笔记(11.6) Sequence
1. Sequence 动作序列.动作按参数顺序执行,动作总时长为每个动作的时长之和. 1.1 成员变量 FiniteTimeAction *_actions[]; float _split; // ...
- ThinkPHP<6.0 SQL注入代码审计分析
版本过多只分析大版本和使用人数较多的版本目前使用人数最多的3.2.3.审计时也是发现多个版本未公开漏洞 测试环境: Mysql5.6/PHP5.5 首先明确的是在不使用PDO做参数绑定时ThinkP ...
- MySQL常用sql语句-----数据库操作
在数据库操作中,操作基本都是围绕增删改查来操作.简称CRUD C创建创建 R读取/检索查询 U Update修改 D删除删除 在数操作数据库时,所有的数据库语句都要以分号结束 数据库操作不区分大小写 ...
- 百万年薪python之路 -- 函数初始练习
1.整理函数相关知识点 2.写函数,检查获取传入列表或元组对象的所有奇数位索引对应的元素,并将其作为新列表返回给调用者. def func(lst): lst = lst[1::2] return l ...
- 用FILE*指针对象读文件的方式。
先直接上代码: ]; ]; char* ptr1; ]; FILE* fh; QString strpath = getenv("GCDIR"); QString str_in ...
- Sublime Text 3 安装 Package Control 结果返回 275309,找不到 Install Package
打开 Preferences->Settings , 查看 ignored-packages 数组中是否有 Package Control,如果有,删除即可.
- linux下shell脚本启动jar包
本文采用的jar包是通过idea下maven打包的springboot项目. 写这个shell脚本是为了在linux下方便启动jar包时不用输入太多的shell命令,将启动脚本的一系列shell命令整 ...
- unity www下载导致内存占用增加问题
服务端或者数据库更改导致客户端更改,最合理的处理方法是客户端时刻检测版本号(可以通过实时检测版本号),如果实时刷新数据库的数据开销比较大,尤其是有图片元素时. 采用unity www类下载时,虽然结束 ...