GO语言中的切片

1.切片声明及创建

声明一个切片int型的切片

var s []int

初始化一个长度为len,容量为cap的切片

s = make([]int,len,cap) cap可以省略,省略后cap等于len

也可以简洁的初始化

s:=make([]int ,len,cap)

还可以指定值的创建切片

s:=[]int{1,2,3,4}

指定索引值式的创建

s:=[]int{3:5} 索引下标为3的值为5

2.切片的相关操作

数组是值类型,切片和数组不一样,切片是引用类型,如果不想改变原来的切片进行操作,可以使用copy(新切片,原切片)复制一份。切片在底层是数组,包含三部分,ptr为指向开始的元素,len为切片的长度,cap为切片的容量。s[1:4]会得到索引为1,2,3的值,脚标是前包括,后不包括。切片可以向后扩展,不可以向前扩展,s[i]不可以超越len(s),向后扩展不可以超越底层数组cap(s)。

例子1:

func update(s []int,val int)  {
	s[0] = val
}

func main(){
	var total = [...]int{0,1,2,3,4,5,6,7}
	s1:=total[:]
	fmt.Println("change before")
	fmt.Println(s1)
	update(s1,100)
	fmt.Println("change after")
	fmt.Println(s1)
}

以上会输出

change before
[0 1 2 3 4 5 6 7]
change after
[100 1 2 3 4 5 6 7]

例子2:以下会输出什么?

func main(){
	var total = [...]int{0,1,2,3,4,5,6,7}
	var s1 []int
	s1=total[2:6]
	fmt.Printf("s1 len=%d,cap=%d\n",len(s1),cap(s1))
	s2:=s1[2:5]
	fmt.Printf("s2 len=%d,cap=%d\n",len(s2),cap(s2))
	fmt.Println(total)
	fmt.Println(s1)
	fmt.Println(s2)
}

输出以下内容

s1 len=4,cap=6
s2 len=3,cap=4
[0 1 2 3 4 5 6 7]
[2 3 4 5]
[4 5 6]

画图看一下

这个就涉及到切片的向后扩展, s2的末索引超过s1的末索引时而不会报错。s1和s2都指向底层的total数组。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值