From abb532e835fd12ee832f21cc3d65d511550f99b6 Mon Sep 17 00:00:00 2001 From: ch3ny4ng Date: Thu, 21 Aug 2025 01:37:35 +0800 Subject: [PATCH] Update ch1-03-array-string-and-slice.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 切片容量的计算不够清晰,只在一张图上得到了体现。为此添加描述和例子 --- ch1-basic/ch1-03-array-string-and-slice.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/ch1-basic/ch1-03-array-string-and-slice.md b/ch1-basic/ch1-03-array-string-and-slice.md index 7f574a29..93e0da51 100644 --- a/ch1-basic/ch1-03-array-string-and-slice.md +++ b/ch1-basic/ch1-03-array-string-and-slice.md @@ -367,7 +367,7 @@ type SliceHeader struct { } ``` -可以看出切片的开头部分和 Go 字符串是一样的,但是切片多了一个 `Cap` 成员表示切片指向的内存空间的最大容量(对应元素的个数,而不是字节数)。下图是 `x := []int{2,3,5,7,11}` 和 `y := x[1:3]` 两个切片对应的内存结构。 +可以看出切片的开头部分和 Go 字符串是一样的,但是切片多了一个 `Cap` 成员表示切片指向的内存空间的最大容量,由​​起始索引位置到 `Data` 末尾​​的元素数量(而不是字节数)决定。下图是 `x := []int{2,3,5,7,11}` 和 `y := x[1:3]` 两个切片对应的内存结构。 ![](../images/ch1-10-slice-1.ditaa.png) @@ -383,9 +383,10 @@ var ( d = c[:2] // 有 2 个元素的切片, len 为 2, cap 为 3 e = c[0:2:cap(c)] // 有 2 个元素的切片, len 为 2, cap 为 3 f = c[:0] // 有 0 个元素的切片, len 为 0, cap 为 3 - g = make([]int, 3) // 有 3 个元素的切片, len 和 cap 都为 3 - h = make([]int, 2, 3) // 有 2 个元素的切片, len 为 2, cap 为 3 - i = make([]int, 0, 3) // 有 0 个元素的切片, len 为 0, cap 为 3 + g = c[1:2] // 有 1 个元素的切片, len 为 1, cap 为 2 + h = make([]int, 3) // 有 3 个元素的切片, len 和 cap 都为 3 + i = make([]int, 2, 3) // 有 2 个元素的切片, len 为 2, cap 为 3 + j = make([]int, 0, 3) // 有 0 个元素的切片, len 为 0, cap 为 3 ) ```