(二十六)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 ...
随机推荐
- Windows快捷方式绑马
0x01前言 windows的shell32在处理控制面板程序的快捷方式文件时,存在一个漏洞,可以加载硬盘上的任意DLL文件,即可执行任意代码. 之前看到一款俄罗斯黑阔写的的快捷方式下载木马并运行的生 ...
- css 文字间距
letter-spacing : 字与字之间的距离 text-indent : 行的抬头间距 line-height : 行高度
- TestLink+Jenkins在Ubuntu16.04搭建集成测试环境
序章 序1:TestLink和TestLink-API-Python-client 目前TestLink的最新版本是1.9.19 TestLink-API-Python-client支持的TestLi ...
- 【Autofac打标签模式】PropertySource和Value
[ Autofac打标签模式]开源DI框架扩展地址: https://github.com/yuzd/Autofac.Annotation/wiki *:first-child { margin-to ...
- 浏览器devtools系列(一)
作为一个web开发人员免不了去和浏览器打交道,前端人员更是如此. 测试人员可能在代码测试的时候容易定位,问题出现在哪里. 不过供桌中常用的可能就是几个,比如前端人员经常看控制面板调试问题,打印后台数据 ...
- c无聊编程
#include<stdio.h> #include<math.h> void fun_1()//绘制余弦直线 { double y; int m, x; ; y >= ...
- vue系列---响应式原理实现及Observer源码解析(一)
_ 阅读目录 一. 什么是响应式? 二:如何侦测数据的变化? 2.1 Object.defineProperty() 侦测对象属性值变化 2.2 如何侦测数组的索引值的变化 2.3 如何监听数组内容的 ...
- ARToolKit-unity
ARToolKit为开源的AR库,相对于高通和easyAr有几点特点: 1)开源 2)识别项目可以动态添加(详细在后) 3)识别文件可以本地生成 4)目前只能识别图片(目前为.jpg格式) 下边开始详 ...
- SpringBoot与MybatisPlus3.X整合之字段类型处理器(八)
pom.xml <dependencies> <dependency> <groupId>org.springframework.boot</groupId& ...
- (JavaScript) 字符串转16进制
function strToBase64() { var str = "https://www.baidu.com/"; var val = ""; for ( ...