分享
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。
## 总结:
**s := []int{1, 2, 3, 4, 5}** 长度**5** 容量**5**
**newS := s[a:b]** 以**s**为基底生成切片时, 长度 **b-a** 容量 **len(s)-a**
当**newS**进行**append**后:
若容量不超 ,那么**[]s**也会跟着改变
若超了,则**[]s**不改变,**[]newS**可视为**new**出来的一个切片 且容量翻倍直至足够容纳新切片,当超过**1000**时,变为每次增长**25%**
## 代码示例
```go
package main
import "fmt"
func main() {
}
// 切片基底数组变更
func slice1(){
//new一个长度5容量5的数组
slice := []int{10, 20, 30, 40, 50}
//切片生成新数组,这个数组的长度为3-1=2 容量为len(slice)-1 此处的1是切片开始的位置
newSlice := slice[1:3]
//进行append操作,append一次后长度变为3
newSlice = append(newSlice, 60)
//由于未超出容量4,因此会导致基底跟随变化
fmt.Printf("slice: %v\n", slice)
fmt.Printf("newSlice: %v\n", newSlice)
// output:
// slice: [10 20 30 60 50]
// newSlice: [20 30 60]
}
// 切片基底数组未变更
func slice2(){
//new一个长度5容量5的数组
slice := []int{10, 20, 30, 40, 50}
//切片生成新数组,这个数组的长度为3-1=2 容量为len(slice)-1 此处的1是切片开始的位置
newSlice := slice[1:3]
//进行append操作,append一次后长度变为5,但是之前容量只有4,因此容量翻倍变为8
newSlice = append(newSlice, 60,70,80)
//由于超出容量4,因此新切片可被视为new出来的,不会导致基底跟随变化
fmt.Printf("slice: %v\n", slice)
fmt.Printf("newSlice: %v\n", newSlice)
// output:
// slice: [10 20 30 40 50]
// newSlice: [20 30 60 70 80]
}
```
有疑问加站长微信联系(非本文作者))
入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889
关注微信1037 次点击
添加一条新回复
(您需要 后才能回复 没有账号 ?)
- 请尽量让自己的回复能够对别人有帮助
- 支持 Markdown 格式, **粗体**、~~删除线~~、
`单行代码` - 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
- 图片支持拖拽、截图粘贴等方式上传