揭露切片的真实面目
本节主要内容位于 runtime/slice.go
, 基于 go1.16.4/amd64
创建一个切片十分简单,如下即可创建一个长度为 10 的 int
切片
1 | slice := make([]int, 10) |
但是具体是如何实现的呢,我们慢慢来看。
slice 结构
在 slice.go
中首先定义的就是 slice
结构体
1 | type slice struct { |
这样一看,其实 slice
也不是那么神奇,结构体中包含了一个指向实际数据的指针array
,以及切片的长度 len
和切片的容量 cap
。
切片作为参数进行传递的时候,传递的不是整个结构体,实际上是传入了 slice
中的 array
数据指针,如果在函数内部修改了切片,那么同样会修改外部的切片。