码迷,mamicode.com
首页 > 其他好文 > 详细

Golang 切片

时间:2018-01-29 17:39:00      阅读:269      评论:0      收藏:0      [点我收藏+]

标签:ice   一个   内容   ring   之间   tin   切片   end   art   

1、切片初始化
(1)、通过内置函数make初始化:
slice := make([]Type,len,[cap])
[]Type,某种类型的数组;
Len 表示切片数据长度;
Cap 表示切片容量,cap >= len,该参数可选,默认cap=len
例如: slice := make([]string,5) //初始化一个字符串类型的切片,长度和容量均为5
slice := make([]string,5,10) //初始化一个字符串类型的切片,长度为5,容量为10
(2)、通过现有数组来初始化
slice := arr[startIndex:endIndex] //startIndex,endIndex可选,startIndex默认为0,endIndex默认为arr长度,取得的数组下标是[startIndex:endIndex) 左闭右开区间
例如: arr := […]string{"aaa","bbb","ccc","ddd"}
slice := arr[1:4] //[1:4) 共3个元素创建一个切片
slice := arr[:4] //[0:4) 共4个元素创建一个切片
slice := arr[1:] //[1:len(arr))
slice := arr[:] //[0:len(arr))
通过现有数组来初始化的切片,其长度为len = endIndex-startIndex,cap=len
也可以用 slice := arr[1:2:3] 来指定切片的cap,cap+startIndex <= len(arr)
2、append 操作
切片初始化后,可以使用append来追加元素: append(slice []Type,elems …Type)
例如: sss := make([]string,0,10)
sss = append(sss,"aaaa")

3、append操作引起的改变
(1)、当切片容量不够时,append操作会对cap扩容,cap长度为len的2倍(仅当len较小时,当len达到一定数量级,经测试其cap扩容长度也不太确定,这个问题后续补充)
(2)、当切片容量不够时,append 操作会引起切片内存地址的变化,即,当len=cap时,append操作会开辟一块内存区域,将现有切片内容复制过去;
从现有数组初始化切片时,得到的切片地址与初始化切片数组索引startIndex元素的地址一致,且切片是该数组对因数据的引用,数组元素改变,切片元素也改变,当cap需要扩容时,切片地址发生改变后,切片与数组之间的引用关系解除,数组元素改变,切片元素不会改变

Golang 切片

标签:ice   一个   内容   ring   之间   tin   切片   end   art   

原文地址:http://blog.51cto.com/linyang/2066409

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!