GoLang学习笔记(二十)切片的声明及遍历

Go语言的切片是对数组的抽象。
Go中的数组的长度不可以改变,Go中就提供了一个灵活、功能强悍的内置类型切片:动态数组。
与数组相比切片的长度是不固定的,可以追加元素。
切片本身没有任何数据,他们只是对现有数组的引用。
切片与数组相比,不需要设定长度,在[]中不用设置值。
从概念上来说,切片slice像一个结构体,这个结构体包含了三个元素:
1、指针,只想数组中slice指定的开始位置
2、长度,即slice的长度
3、最大长度,也就是slice开始位置到数组最后位置的长度

 

声明一个切片:
var 变量名 []变量类型
切片不需要说明长度,所以未初始化的切片为空切片,该默认切片为nil,长度为0

var s1 []int

用make()函数来创建切片:
1、var 变量名 []变量类型 = make([]变量类型,长度)
2、简写:变量名 := make([]变量类型,长度)
3、可以指定容量,且容量参数是可选参数:变量名 := make([]变量类型,长度、容量)

var s2 = make([]int, 5)
var s3 = make([]int, 4, 6)
s4 := make([]int, 5)
s5 := make([]int, 4, 6)

直接初始化:

a := []int{1,2,3}

通过数组截取来初始化切片:
arr := [5]int{1,2,3,4,5}
1、包含数组中所有元素
    a := arr[:]
2、从一个下标到另一个下标-1
    a := arr[开始的下标:结束的下标-1]
3、从一个指定的下标到最后一个元素
    a := arr[开始的下标:]
4、从开始的下标到指定的一个下标-1
    a := arr[:结束的下标-1]
通过截取切片来初始化切片:
    b := a[较小的下标:较大的下标]

func testSlice03(){
	nums1 := []int{0,1,2,3,4,5,6,7,8,9}
	printMsg(nums1)
	nums2 := nums1[1:4]
	printMsg(nums2)
	nums3 := nums1[:3]
	printMsg(nums3)
	nums4 := nums1[6:]
	printMsg(nums4)
}

运行结果:

len = 10 , cap = 10 , slice = [0 1 2 3 4 5 6 7 8 9]
len = 3 , cap = 9 , slice = [1 2 3]
len = 3 , cap = 10 , slice = [0 1 2]
len = 4 , cap = 4 , slice = [6 7 8 9]

可以从结果中的cap看出,nums2实际是删除了nums1[0],所以cap为9。
看num3,从头开始截取,虽然只有3个元素被截取出来了,但cap依然为10。
在看num4,实际是将第六个元素之前的元素都删除了,所以cap为4。
由此可以看出,截取后的cap是会有变化的。
综合以上3个例子,可以看出截取的切片,从指定开始截取的元素之前的元素,都会从cap中减去。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值