## 总结:
**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]
}
```
有疑问加站长微信联系(非本文作者))