暂无图片
go语言中切片容量计算方法
我来答
分享
BBK
2022-02-28
go语言中切片容量计算方法

image.png
func main() {
var s []int
printSlice(s)

// 添加一个空切片
s = append(s, 0)
printSlice(s)

// 这个切片会按需增长
s = append(s, 1)
printSlice(s)

// 可以一次性添加多个元素
s = append(s, 2, 3, 4)
printSlice(s)
printSlice(s)
s = append(s, 5, 6)
printSlice(s)

}

func printSlice(s []int) {
fmt.Printf(“len=%d cap=%d %v\n”, len(s), cap(s), s)

输入出结果:

func main() {
var s []int
printSlice(s)

// 添加一个空切片
s = append(s, 0)
printSlice(s)

// 这个切片会按需增长
s = append(s, 1)
printSlice(s)

// 可以一次性添加多个元素
s = append(s, 2, 3, 4)
printSlice(s)
printSlice(s)
s = append(s, 5, 6)
printSlice(s)

}

func printSlice(s []int) {
fmt.Printf(“len=%d cap=%d %v\n”, len(s), cap(s), s)
1
package main
2

3
import “fmt”
4

5
func main() {
6
var s []int
7
printSlice(s)
8

9
// 添加一个空切片
10
s = append(s, 0)
11
printSlice(s)
12

13
// 这个切片会按需增长
14
s = append(s, 1)
15
printSlice(s)
16

17
// 可以一次性添加多个元素
18
s = append(s, 2, 3, 4)
19
printSlice(s)
20
printSlice(s)
21
s = append(s, 5, 6)
22
printSlice(s)
23
}
24

25
func printSlice(s []int) {
26
fmt.Printf(“len=%d cap=%d %v\n”, len(s), cap(s), s)
27
}
28

len=0 cap=0 []
len=1 cap=1 [0]
len=2 cap=2 [0 1]
len=5 cap=6 [0 1 2 3 4]
len=5 cap=6 [0 1 2 3 4] *《====切片长度与容量,应该一样多吧,这里有点不理解*
len=7 cap=12 [0 1 2 3 4 5 6] *《====切片长度与容量,应该一样多吧,这里有点不理解*

我来答
添加附件
收藏
分享
问题补充
1条回答
默认
最新
文成

切片在扩容的时候不是按照长度来扩容的 而是预先扩容大于长度的容量,每次超过容量的时候 就会新申请一段空间,再把数据拷贝到新的内存里
Go指南_切片的长度与容量

暂无图片 评论
暂无图片 有用 1
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏