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

Go之切片

时间:2019-01-08 12:11:51      阅读:158      评论:0      收藏:0      [点我收藏+]

标签:golang   []   将不   需要   ima   直接   nbsp   lang   结合   

在Golang中数组定义后长度不可变,但很多时候我们需要数组能够动态赋值,这个时候就可以用到slice切片来解决这个问题。

一:切片的介绍

①:切片是数组的一个引用,因此切片是引用类型数据;

②:切片的使用方法基本和数组一样;

③:也可以理解切片为动态的数组(虽然和数组有本质的区别);

④:切片的语法定义 var slice []int

二:切片的原理

切片与指针在内存的布局类型,不同的是切片在内存分成了三部分,如下图所示第一块存的是数组的第一个元素的内存地址,第二块是切片的长度,第三块是切片的容积。

技术分享图片

三:切片的定义/声明方法

①:引用一个已经创建好的数组

备注:第九行的arr[:3]表示从第0个元素切到第三三个元素即 0=<切片<3。后面再详细讲解。

技术分享图片

②:使用meke函数来创建切片

备注:右下图可知推到可知,切片如果不指定值,将会根据切片的数据类型指定默认值。

技术分享图片

③:定义切片的同时直接指定数组

技术分享图片

备注:①与②③方式的区别①直接引用定义好的数组,对程序员而言是可见的,而②③由于切片实在内存底层维护,所依程序员不可见(结合第二大类理解)。

四:切片使用细节

①:切片赋值范围注意点 var  slice = arr[0:arr[end]],将不会包含arr数组的最后一个元素,需要 arr[0:len(arr)]才能完全赋值给slice;

②:[start:end]的使用细节,[0:end]可简写为[:end]或[0:]或[:],其他的细节使用一样;

③:可以通过cap()函数统计切片的最容量,举例略。

④:切片定义后还需要引用数组或make后才能使用。

⑤:append函数对切片进行动态追加(该过程将在内存创建并引用新的数组空间)

  备注:append()函数如果最佳的是具体的数值如slice = append(slice, 10)则不需要...;由下图可知append后,slice引用了新的内存数组地址。

技术分享图片

⑥:切片的copy

备注:切片的copy需要注意的点是,接受复制的切片必须先定义好或已经拥有内存数组空间。

技术分享图片

⑦:字符串亦可以赋值给切片,过程与数组一致,举例略。

Go之切片

标签:golang   []   将不   需要   ima   直接   nbsp   lang   结合   

原文地址:https://www.cnblogs.com/louis181214/p/10237779.html

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