登录
首页 >  Golang >  Go问答

golang切片cap和len有啥区别?

来源:Golang技术栈

时间:2023-06-27 16:40:25 295浏览 收藏

目前golang学习网上已经有很多关于Golang的文章了,自己在初次阅读这些文章中,也见识到了很多学习思路;那么本文《golang切片cap和len有啥区别?》,也希望能帮助到大家,如果阅读完后真的对你学习Golang有帮助,欢迎动动手指,评论留言并分享~

问题内容

golang切片cap和len有啥区别?

正确答案

在 Go 语言中,切片(slice)是一种动态数组,它提供了方便且灵活的操作数组元素的方式。切片有两个重要的属性:容量(capacity)和长度(length)。

长度(len)表示切片当前包含的元素个数。可以通过内置的 len() 函数获取切片的长度。例如:

s := []int{1, 2, 3, 4, 5}
fmt.Println(len(s))  // 输出:5

容量(cap)表示切片内部底层数组的大小。容量决定了切片可以扩展的最大长度。可以通过内置的 cap() 函数获取切片的容量。例如:

s := make([]int, 5, 10)
fmt.Println(cap(s))  // 输出:10

切片的容量可以动态增长,当切片长度超过容量时,底层数组会重新分配更大的空间,容量会相应增加。可以使用 append() 函数向切片追加元素,当切片容量不足时,会自动进行扩容。

例如:

s := make([]int, 5, 10)
fmt.Println(len(s))  // 输出:5
fmt.Println(cap(s))  // 输出:10

s = append(s, 6, 7, 8, 9, 10)
fmt.Println(len(s))  // 输出:10
fmt.Println(cap(s))  // 输出:10

s = append(s, 11)
fmt.Println(len(s))  // 输出:11
fmt.Println(cap(s))  // 输出:20

在上述示例中,初始切片的长度为 5,容量为 10。随着追加元素,当切片的长度超过容量时,切片会自动进行扩容,底层数组会重新分配更大的空间,容量变为 20。

因此,区别总结如下:

  • len() 返回切片当前包含的元素个数。
  • cap() 返回切片底层数组的大小,即切片的容量。
  • 切片的容量决定了切片可以扩展的最大长度,超过容量时会自动进行扩容。

本篇关于《golang切片cap和len有啥区别?》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于Golang的相关知识,请关注golang学习网公众号!

声明:本文转载于:Golang技术栈 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>