golang切片

golang切片(v21.8.3)

为什么用切片

1.数组容量固定,不能自动扩展
2.值传递,数组作为函数参数时,将整个数组值拷贝一份给形参
3.在golang中,切片可以完美替代数组

切片的本质

1.它不是一个数组的指针,是一种数据结构体,用来操作数组内部元素
2.在runtine/slice.go ,可以看出切片是种特殊的结构体
	type slice struct{
		*p
		len
		cap
	}

切片的基础组成

arr[1:3:5]
切片名称[low:high:max]
low:起始下标位置
high:结束下标位置 len=high-low
容量cap: cap=max-low

arr[1:3]
切片名称[low:high]
切片截取数组,容量跟随原数组

arr[:3:5]
从0开始,到high结束(不包含)

arr[low:]
从low开始,到末尾

arr[:high]
从0开始,到high结束,容量跟随原先容量
arr:=[10]int{1,2,3,4,5,6,7,8,9,10}

s:=arr[1:5:7]
s=[2,3,4,5]
len(s)=4  //5-1=4
cap(s)=6  //7-1=6


s1:=s[0:6]
s1=[2,3,4,5,6,7]
len(s1)=6  //6-0
cap(s1)=6  //跟随原切片

s2 := arr[2:7]   //s2=[3,4,5,6,7]
len(s2)=5  //7-2
cap(s2)=8  //10-2


s3 := s2[2:7]    //s3=[5,6,7,8,9]
len(s3)=5  //7-2
cap(s3)=6  //8-2

切片的创建

1.自动推导    slice:=[]int{1,2,3,4,5}
2.slice:=make([]int,长度,容量)
3.slice:=make([]int,长度) //创建切片时,没有指定容量的,容量=长度

注意:make只能穿件slice,map和channel,并且返回一个有初始值(非零)的对象

切片作函数参数–(传地址)实际还是值传递

golan传参只有值传递!

切片常用函数

1.append()

append(切片对象,待追加元素)
追加的时候,如果切片容量没有满,那么就把追加元素追到后面
如果切片容量满了,扩充时容量小于1024时,那么以两倍的方式增加,例如当前切片容量999,满了继续append,那么容量变为1998,接下来按照某种算法扩展大小



2.copy

部分坑
https://www.jianshu.com/p/be07bee40b08

copy(dst,src []Type)

它表示把切片 src 中的元素拷贝到切片 dst 中,返回值为拷贝成功的元素个数。如果 src 比 dst 长,就截断;如果 src 比 dst 短,则只拷贝 src 那部分:

str=[]string{"a","b","c","d","e"}

copy(str[3:],str[4:])  //内容是将str[4:]的内容覆盖到str[3:]
结果变为 [a,b,c,e,e]

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值