Golang Slice
Slice也叫做切片,是golang中最为常用的一个结构之一,跟数组相比,它更加灵活便利,拥有自动扩容策略,但是也存在着一些比较容易被忽略的坑点,文章会先介绍Slice的基本使用方式,接着会介绍Slice的内部实现,最后会总结一些我遇到过的坑点(这一点可能会持续更新)~
<h3>使用方式</h3> <h4>Slice切片初始化</h4>slice的初始化和数组的初始化方式特别相似,但是这是两种完全不同的数据结构,数组的容量大小是不允许被调整的。
<pre><code>//slice的初始化 s2 := []int{} s3 := []int{1, 2, 3} s4 := make([]int, 0, 10) //预分配一些容量,make的第二个参数为len,第三个参数为capacity //数组初始化 s5 := [3]int{1, 2, 3} s6 := [...]int{1, 2, 3} //自动推导 </code></pre> <h4>基本操作</h4> <pre><code>s1 := make([]int, 10) //make时指定len时会给定默认值,如果打印s1,输出结果是10个0,感兴趣可以试一试 //slice的遍历 for index, value := range s1 { //do something } //slice追加 s1 := append(s1, 1) //清空slice s1 := s1[0:0] //获取slice的长度 length := len(s1) //获取slice的容量 capacity := cap(s1) //获取slice子串 s2 := s1[0:10] //这里是左闭右开的原则 //将s1或s1的字串追加到s2中 s2 := append(s2, s1[0:10]...) //...是一个操作符,会将整个切片拆开append到s2中 </code></pre> <h3>slice的内部结构</h3>在运行时切片的结构使用如下SliceHeader表示的,分别有指向数组的指针、切片长度、切片容量
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-k4r5GrYQ-1594266842810)(https://yunpan.oa.tencent.com/note/api/file/getImage?fileId=5f06916e6f0b9316e2670201)]
您可能感兴趣的文章:
golang中的空slice
U3D笔试题1:golang实现
Golang语言slice实现原理及使用方法
Golang 切片(slice)扩容机制源码剖析
go(golang)之slice的小想法1
golang读取接口数据interface{}
[go语言]-slice实现的使用和基本原理
golang 函数传多个参数_Golang中的参数传递示例详解
Golang slice 切片原理
Golang 深入 slice 实现原理及使用技巧