arrays - 即使在切片和变异之后,为什么/如何保留其初始化值?
问题描述
我正在学习 go 的基础知识,在这里的游览中找到了这个。
我不明白为什么数组值不是 0 或 nil 之后s = s[:0]
func main() {
s := []int{2, 3, 5, 7, 11, 13}
printSlice(s)
// Slice the slice to give it zero length.
s = s[:0]
printSlice(s)
// Extend its length.
s = s[:4]
printSlice(s)
// Drop its first two values.
s = s[2:]
printSlice(s)
}
func printSlice(s []int) {
fmt.Printf("len=%d cap=%d %v\n", len(s), cap(s), s)
}
输出 :
len=6 cap=6 [2 3 5 7 11 13]
len=0 cap=6 []
len=4 cap=6 [2 3 5 7]
len=2 cap=4 [5 7]
解决方案
切片是数组上的视图。如果超出容量,切片只会创建一个新的更大的数组并复制内容。如果截断切片,切片将继续使用其原始数组。当您创建一个较小的切片时,它仍然使用旧的支持数组,其中包含先前操作的剩余内容。当您追加到该切片时,它将继续使用相同的数组,直到您超出容量。
推荐阅读
- excel - Excel宏如何禁用行?
- java - java - 如何修复“发生不可恢复的堆栈溢出......Java返回:-1073741819”错误?
- firebase - 如何解决 google cloud firestore 读写 api 错误?
- input - ANTD InputNumber 面板中的 Colpase stopPopagation 在步进器上单击
- javascript - 从自定义元素中移除事件监听器
- javascript - 如何在 monorepo 中按源共享 React 组件?
- docker - docker-compose up 因不存在的容器冲突而失败
- php - 在自定义类 laravel 中使用存储库
- python - 从熊猫数据框中两列的差异创建新行
- javascript - 编号列表中的数组元素不起作用 JS/HTML