登录
首页 >  Golang >  Go问答

在切片开始处,何时与数组结尾的容量不同?

来源:stackoverflow

时间:2024-02-16 20:54:22 309浏览 收藏

哈喽!大家好,很高兴又见面了,我是golang学习网的一名作者,今天由我给大家带来一篇《在切片开始处,何时与数组结尾的容量不同?》,本文主要会讲到等等知识点,希望大家一起学习进步,也欢迎大家关注、点赞、收藏、转发! 下面就一起来看看吧!

问题内容

在《go 编程语言》一书中,作者指出了以下内容(在有关切片的 4.2 节中):

[切片的]长度是切片元素的数量;它不能超过容量,通常是切片开头和底层数组结尾之间的元素数量。

问题

由于作者选择使用“通常”这个词,这意味着实际上存在切片容量与切片开头之间的元素数量不同的情况以及底层数组的末尾——什么时候会出现这种情况?

也就是说,下面的表达式什么时候会是true

cap(mySlice) != len(underlyingArray) - startIndexOfSlice

我能想到的唯一情况是切片为 nil 时,在这种情况下将没有底层数组。


解决方案


完整的 slice expression 可以设置小于完整基础数组的容量。

x := make([]string, 20)
y := x[0:10:10]

fmt.Println("x:", len(x), cap(x)) // prints x: 20 20
fmt.Println("y:", len(y), cap(y)) // prints y: 10 10

切片 xy 共享相同的底层数组,但 y 的容量小于 x 的容量。

终于介绍完啦!小伙伴们,这篇关于《在切片开始处,何时与数组结尾的容量不同?》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布Golang相关知识,快来关注吧!

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