Skip to content

切片

slice 本身是一个 描述符(header),不是数据本体。

什么意思?多个slice可能共享同一块底层数组。

go
type sliceHeader struct {
    Data *T   // 指向底层数组
    Len  int
    Cap  int
}

slice = 指针 + 长度 + 容量,数据在 底层数组。

如果 append 添加的时候,Data 已经满了,就会重新创建一个 Data 用来存放数据。

slice 通过 make 创建

go
s := make([]string, 3)

append

go
s = append(s, "d")

copy

go
c := make([]string, len(s))
copy(c, s)

切片

slice[low:high]
go
l := s[2:5]

l = s[:5]

l = s[2:]

多维 slice