续上篇 Day1 理解 golang slice 用法及原理 I
什麽是 slice 是的容量 (capbility,也就是上篇所提的 cap),跟长度有什麽关系 (length)?
打个比方,有一瓶矿泉水,矿泉水最多能容纳 600cc,但是实际上只装有 300cc 的水。大概就是这种感觉。
s := make([]int, 3, 5)
make 创建了个型态为 int 长度为 5 的 underlying array,并且用一个名为 s 的 slice 描述了从第零个元素到第三个元素的片段。
最後一个创建方式
s := make([]int, 3)
其实就创建一个长度为 3 的 underlying array,并且使用 s 描述这一整段 array,有就是说 len(s) 等於 cap(s)。
众所皆知 array 是不能伸缩的,underlying array 也是 array,所以 array 不能伸缩。但是 slice 可以透过 slice header 的长度的更改就轻易达到了伸缩
的效果。
slice 最常看见的语法就是用分号取一小个片段,所以 slice 能缩小是确定的。
但是 slice 能伸长吗?答案是可以的。
s := make([]int, 3, 5)
s = s[:len(s) + 1]
没错,你没看错,这段程序是不会 panic 的。还记得矿泉水的例子吗,水没装满当然能继续装啊,只要不装超过容量就行。同理,这段程序,s 只要伸张不超过容量就不会 panic。
但是这段程序是为了观念所写,除非有什麽特定场景,不然没事千万别这样干。如果觉得 slice 长度不够,大多数情况下用 append 函式解决,後面几张也会提到 append 是怎麽做的。
本篇文章只是要探索一下 git 工作流程,这篇文章只会使用 git 有关的内容,因为我对其他版控生态...
前置作业 复制程序码 还记得前天最後建立的资料夹吗,把它用 VS code 打开,再建立一个 php...
不怎麽重要的前言 上一篇我们介绍了什麽是变数,也结合了资料型态来让大家了解,接下来大家有没有想过,如...
我们在举办【Python 大数据培训课程】时,发现很多学员对 Selenium 有以下问题,在此解释...