Golang笔记--切片的三索引切分

在go1.2中引入了能够限制新建切片容量的三索引切分操作,允许创建新的切片,并指定这个新切片的长度和容量,什么叫三索引切分呢,看看下面的两个索引拆分后的长度和容量

var areaSlice = []string{"广州", "北京", "上海", "深圳", "武汉", "重庆", "成都", "洛阳"}
areaSlice1 := areaSlice[1:3]
fmt.Printf("areaSlice1值%v,长度%v,容量%v,类型%T\n", areaSlice1, len(areaSlice1), cap(areaSlice1), areaSlice1)

//输出
areaSlice1值[北京 上海],长度2,容量7,类型[]string

上面案例中,对areaSlice做了从第一个元素开始,到第三个元素(不包含)切分了一个切片,在Golang笔记--切片(slice)的使用这里可以知道,出来的是一个长度为2,容量为7的这么一个切片。

而在golang的1.2以上版本,slice的切分提供了一个可限制容量的索引。

var areaSlice = []string{"广州", "北京", "上海", "深圳", "武汉", "重庆", "成都", "洛阳"}
areaSlice2 := areaSlice[1:3:5]
fmt.Printf("areaSlicea2值%v,长度%v,容量%v,类型%T\n", areaSlice2, len(areaSlice2), cap(areaSlice2), areaSlice2)

//输出
areaSlicea2值[北京 上海],长度2,容量4,类型[]string

看案例areaSlice2 := areaSlice[1:3:5],最后的5,实际上是指最后出来的容量按初始索引计算到5,不包括5,也就是出来的切片的容量是4,这样可以显式控制切片容量的大小。

小结:

1、Golang1.2版本以上允许你控制切片的容量,即底层数组的大小,通过显式设置容量限制

2、显式控制切片容量的时候,需要你确保新切片不会访问原始切片超出容量限制的部分,不然潜在的越界访问错误。

上一篇:记录golang常用库-json处理

下一篇:linux环境PostgreSQL安装

关注公众号

发表评论